如何使用spring-boot在spring批处理中设置JobParameters

时间:2014-02-04 16:15:09

标签: spring-batch spring-el spring-boot

我按照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'

谢谢!

2 个答案:

答案 0 :(得分:12)

从命令行解析作业参数,然后创建并填充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);
}

或者在配置Spring Batch Job工件的@Configuration类中,如ItemReader,ItemWriter等......

@Bean
@StepScope
public JdbcCursorItemReader<MyPojo> reader(@Value("#{jobParameters}") Map jobParameters) {
    return new MyReaderHelper.getReader(jobParameters);
}

答案 1 :(得分:8)

我设法通过简单地注释我的bean来实现这个目的:

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