私は http://spring.io/guides/gs/batch-processing/ でガイドに従いましたが、構成可能なパラメーターのないジョブについて説明しています。 Mavenを使用してプロジェクトをビルドしています。
XMLで定義した既存のジョブを移植していて、コマンドを介してjobParametersを渡したいのですが。
私は以下を試しました:
@Configuration
@EnableBatchProcessing
public class MyBatchConfiguration {
// other beans ommited
@Bean
public Resource destFile(@Value("#{jobParameters[dest]}") String dest) {
return new FileSystemResource(dest);
}
}
次に、以下を使用してプロジェクトをコンパイルします。
mvn clean package
それから私はこのようなプログラムを起動しようとします:
Java my-jarfile.jar dest=/tmp/foo
そして、私は言って例外を得ます:
[...]
Caused by: org.springframework.expression.spel.SpelEvaluationException:
EL1008E:(pos 0): Field or property 'jobParameters' cannot be found on object of
type 'org.springframework.beans.factory.config.BeanExpressionContext'
よろしくお願いします!
私は何とかして、次のようにBeanに注釈を付けるだけでうまくいきました。
@Bean
@StepScope
public Resource destFile(@Value("#{jobParameters[dest]}") String dest) {
return new FileSystemResource(dest);
}
コマンドラインからジョブパラメーターを解析し、JobParametersを作成して入力します。
public JobParameters getJobParameters() {
JobParametersBuilder jobParametersBuilder = new JobParametersBuilder();
jobParametersBuilder.addString("dest", <dest_from_cmd_line);
jobParametersBuilder.addDate("date", <date_from_cmd_line>);
return jobParametersBuilder.toJobParameters();
}
JobLauncherを介してジョブに渡します-
JobLauncher jobLauncher = context.getBean(JobLauncher.class);
JobExecution jobExecution = jobLauncher.run(job, jobParameters);
これで、次のようなコードを使用してそれらにアクセスできます-
@Bean
@StepScope
public Resource destFile(@Value("#{jobParameters[dest]}") String dest) {
return new FileSystemResource(dest);
}
または、ItemReader、ItemWriterなどのSpring Batch Jobアーティファクトを構成している@Configurationクラス内...
@Bean
@StepScope
public JdbcCursorItemReader<MyPojo> reader(@Value("#{jobParameters}") Map jobParameters) {
return new MyReaderHelper.getReader(jobParameters);
}