spring-batch - 我如何从 Spring Batch 中的 3 个不同的表中读取
问题描述
我正在尝试在每个步骤中使用自定义阅读器、处理器和编写器:
public Step step1(StepBuilderFactory factory,
ItemReader reader,
ExpireAssessmentWriter writer,
AssessmentItemProcessor processor,
PlatformTransactionManager platformTransactionManager){
return stepBuilderFactory.get("step1")
.transactionManager(platformTransactionManager)
.<Assessment,Assessment>chunk(10)
.reader(reader)
.processor(processor)
.writer(writer)
.build();
}
//update aggregate balance table
@Bean
public Step step2(StepBuilderFactory factory,
ItemReader reader,
BalanceItemWriter writer,
BalanceProcessor processor,
PlatformTransactionManager platformTransactionManager){
return stepBuilderFactory.get("step2")
.transactionManager(platformTransactionManager)
.<Assessment,Assessment>chunk(10)
.reader(reader)
.processor(processor)
.writer(writer)
.build();
}
@Bean
public Step step3(StepBuilderFactory factory,
ItemReader<Assessment> reader,
CustomWriter3 writer,
CustomItemProcessor3 processor,
PlatformTransactionManager platformTransactionManager){
return stepBuilderFactory.get("step3")
.transactionManager(platformTransactionManager)
.<Assessment,Assessment>chunk(10)
.reader(reader)
.processor(processor)
.writer(writer)
.build();
}
第一步工作正常,但只有当我把这个读者留在同一个班级时:
private static final String READER_QUERY = "SELECT * FROM TABLE1 WHERE COLUMN='TEST'";
@Bean
public JdbcCursorItemReader<Assessment> reader(DataSource dataSource) {
return new JdbcCursorItemReaderBuilder<Assessment>()
.dataSource(dataSource)
.name("AssessmentUtilityReader")
.sql(READER_QUERY)
.rowMapper(new AssessmentMapper())
.build();
}
如何为每个步骤创建一个自定义阅读器来读取它自己的查询?
我可以创建一个扩展 JdbcCursorItemReader 并返回相同代码片段的自定义阅读器吗?:
@Bean
public JdbcCursorItemReader<Assessment> reader(DataSource dataSource) {
return new JdbcCursorItemReaderBuilder<Assessment>()
.dataSource(dataSource)
.name("AssessmentUtilityReader")
.sql(READER_QUERY)
.rowMapper(new AssessmentMapper())
.build();
}
```
解决方案
要回答您的问题,不,我们不能在同一个阅读器中使用多个查询。
但是在同一个作业中可能有三个不同的步骤,每个步骤可以查询不同的表,在此之前,请您解释一下当表不相关时在同一个作业中查询三个不同表的确切要求。
推荐阅读
- sql - 通过更改列进行 SQL 组
- html - 在表格行悬停时,在保持表格行高度不变的情况下,使元素的字体大小变大
- gradle - 自定义 Gradle War 任务找不到 Zip
- python - 如何在两个日期之间创建字段周
- angular - 如何在单独的 Angular Firestore 集合上进行内部连接?
- java - 使用通配符使用 RedisTemplate zSet 从 redis 中获取所有值并删除所有值
- r - 当我可以执行密度图时,为什么我的朴素贝叶斯分类器会出现 Density.default 错误?
- c++ - 函数制表和包装
- javascript - 无法使用会话更新信用卡
- python - 有没有办法让改变/切换屏幕后按钮颜色保持不变?