web-dev-qa-db-ja.com

spring-bootを使用して春のバッチでJobParametersを設定するにはどうすればよいですか

私は 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'

よろしくお願いします!

16
Philippe

私は何とかして、次のようにBeanに注釈を付けるだけでうまくいきました。

@Bean 
@StepScope
public Resource destFile(@Value("#{jobParameters[dest]}") String dest) {
    return new FileSystemResource(dest);
}
9
Philippe

コマンドラインからジョブパラメーターを解析し、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);
}
15
Ashok