ファイルの名前を取得する残りの呼び出しに基づいてファイルを処理する必要がある場合、ジョブパラメータに追加してBeanの作成中に使用するという要件があります。Springバッチステップスコープの動作方法
(リーダー、ライター)のためのステップスコープBeanを作成し、ジョブパラメータを使用しています。新しいスレッドでジョブを開始しています。私はasynchronusタスクエクセプターを使用してジョブを開始しています。我々は、スプリングバッチStepScope
オブジェクトは、特定のステップではなくシングルトンに固有のものである@StepScope
jobParametersBuilder.addString("fileName", request.getFileName());
jobExecution = jobLauncher.run(job, jobParametersBuilder.toJobParameters());
@Bean
public JobLauncher jobLauncher() {
SimpleJobLauncher jobLauncher = new SimpleJobLauncher();
jobLauncher.setJobRepository(jobRepository());
jobLauncher.setTaskExecutor(asyncTaskExecutor());
return jobLauncher;
}
@Bean
@StepScope
public ItemWriter<Object> writer(@Value ("#{jobParameters['fileName']}"String fileName) {
JdbcBatchItemWriter<Object> writer = new JdbcBatchItemWriter<>();
writer.setItemSqlParameterSourceProvider(
new BeanPropertyItemSqlParameterSourceProvider<Object>());
writer.setSql(queryCollection.getquery());
writer.setDataSource(dataSource(fileName));
return writer;
}