【发布时间】:2017-03-20 17:17:23
【问题描述】:
我正在使用 java 配置(spring-boot)进行 spring 批处理。我有一个员工 ID 列表,对于每个 ID,我需要运行一个查询(如下所示),然后处理数据。
select * from history where employee_id = ?
我知道我们可以使用reader.setPreparedStatementSetter来动态设置上述SQL中的参数。但是,我不确定如何为列表中的每个员工 ID 重复批处理过程。即使我将 reader() 标记为@StepScope,也只会调用一次 reader。 (即),批处理只运行一次。任何帮助表示赞赏。
List employeeIds = new ArrayList();
employeeIds.add(1);
employeeIds.add(2);
@Bean
@StepScope
public ItemReader<History> reader() {
JdbcCursorItemReader<History> databaseReader = new JdbcCursorItemReader<>();
databaseReader.setSql("select * from history where employee_id = ?");
databaseReader.setPreparedStatementSetter(..);
....
return databaseReader;
}
@Bean
public Step step(StepBuilder stepBuilder){
return stepBuilderFactory.get("sample").
.reader(reader())
.processor(processor())
.writer(writer())
.build();
}
【问题讨论】:
-
这是一种常见的模式 (docs.spring.io/spring-batch/reference/html/…)。您的阅读器从 id-list 返回 ID,并且您当前的阅读器必须转换为处理器
-
嗯,一个ItemReader可以映射到多个ItemProcessor吗?因为,我希望 ItemProcessor 为原始列表中的每个 ID 运行。
标签: java spring spring-batch