【发布时间】:2018-09-10 19:38:45
【问题描述】:
我是 sprint 批次的新手,我找不到我的问题的答案。
我正在尝试使用 Spring Boot 和 Spring Batch 来实现 JOB。我的 JOB 需要一个参数,所以我正在执行这样的应用程序:
java -jar -Dspring.profiles.active=gus /applications/botbit-batch/botbit-batch-1.0.0.jar --spring.batch.job.names=persistCustomerSuccessMetrics date=2015-12-13
粗体是我需要的参数。
我第一次执行应用程序,但在以后的执行中,我的工作总是使用我在第一次执行时传递的参数。
日志显示:
Running default command line with:
[spring.batch.job.names=persistCustomerSuccessMetrics, date=2015-12-13]
后面几行:
Job: [FlowJob: [name=persistCustomerSuccessMetrics]] launched with the following parameters:
[{date=2015-12-12, -spring.batch.job.names=persistCustomerSuccessMetrics, run.id=2}]
日期 2015-12-12 是第一次执行的日期,我无法使用不同的参数再次执行该作业。
我的工作设置:
@Bean
@JobScope
public CustomerSuccessMetricsReader customerSuccessMetricsReader(@Value("#{jobParameters[date]}") String date) {
return new CustomerSuccessMetricsReader(storeStatisticsUrl, restTemplate, date);
}
@Bean
public CustomerSuccessMetricsProcessor customerSuccessMetricsProcessor() {
return new CustomerSuccessMetricsProcessor();
}
@Bean
public Job persistCustomerSuccessMetrics(Step persistCustomerSuccessMetricsStep1) {
return jobBuilderFactory.get("persistCustomerSuccessMetrics").incrementer(new RunIdIncrementer())
.listener(new CustomerSuccessMetricsCompletionListener()).flow(persistCustomerSuccessMetricsStep1).end().build();
}
@Bean
public Step persistCustomerSuccessMetricsStep1() {
return stepBuilderFactory.
get("persistCustomerSuccessMetricsStep1").
<CustomerSuccessMetricsDTO, CustomerSuccessMetricsDTO> chunk(10).
reader(customerSuccessMetricsReader(null)).
processor(customerSuccessMetricsProcessor()).
//writer(customerSuccessMetricsWriter).
build();
}
我已尝试删除 incrementer(new RunIdIncrementer()) 在这种情况下,它可以正常工作,但我无法使用相同的参数重复执行。
所以,我需要使用以下 rqs 来实现这项工作:
- 作业必须采用执行参数,而不是存储在数据库中的参数
- 作业必须支持使用相同参数的多次执行。
我将不胜感激。 问候
【问题讨论】:
标签: spring-batch