Spring Batch その7
今回もSpring Batch です。
今回は、csvファイルパスをジョブパラメータに変更する対応を行います。
修正前
public class Csv2dbJob01Config { /** CSVファイルパス */ private static final String CSV_FILE_PATH = "D:/CsvData/13tokyo.csv"; public Step csv2dbStep() { .reader(addressReader()) } @Bean public FlatFileItemReader<AddressDto> addressReader() { FlatFileItemReader<AddressDto> reader = new FlatFileItemReader<>(); reader.setResource(new FileSystemResource(CSV_FILE_PATH));
修正後
public class Csv2dbJob01Config { @Autowired private FlatFileItemReader<AddressDto> addressReader; public Step csv2dbStep() { .reader(addressReader) } @Bean @StepScope public FlatFileItemReader<AddressDto> addressReader(@Value("#{jobParameters['csvFilePath']}") String csvFilePath) { FlatFileItemReader<AddressDto> reader = new FlatFileItemReader<>(); reader.setResource(new FileSystemResource(csvFilePath));
Spring Batchで提供している遅延バインディングを利用して、ジョブパラメータを取得するように修正
遅延バインディングを利用する為には、以下の2つが必要です
- 取得した値をプレースホルダ経由にする
- 対象のBean定義に@StepScopeを付与する
プレースホルダ経由とは、#{jobParameters['csvFilePath']} のことを指しています。
今回は、ジョブパラメータだったので #{jobParameters['名前']を利用しましたが、
ほかに、stepExecutionContext用の#{stepExecutionContext['名前']}、jobExecutionContext用の#{jobExecutionContext['名前']}が存在します。
実行
Spring Batch その5と同じようにSTSで実行する場合
メインタブ
プロジェクト
spring-batch-sample
メイン・クラス
org.springframework.batch.core.launch.support.CommandLineJobRunner
引数タブ
プログラム引数
jp.tokyo.higashimurayama.tohnaman.batch.jobs.csv2db.Csv2dbJob01Config csv2dbJob data=2017/01/28 num=1 csvFilePath=D:/CsvData/13tokyo.csv
赤字部分が修正箇所です。
実行前には、データを削除してから実行してください。
今回は、ここまで