【发布时间】:2018-06-28 18:25:37
【问题描述】:
我正在尝试使用 Spring Batch 创建一个使用 DataSource(之前配置)并运行查询的作业。 我希望能够遍历返回的 ResultSet 以使用返回的数据创建一个新表。
我可以创建这样的阅读器,但我不知道如何迭代结果。
@Bean
public JdbcCursorItemReader<ResultSet> reader(String query, DataSource dataSource) {
JdbcCursorItemReader<ResultSet> itemReader = new JdbcCursorItemReader<>();
itemReader.setDataSource(dataSource);
itemReader.setSql(query);
return itemReader;
}
我的 ItemProcessor 应该收到什么?这个?
public class ExtractionItemProcessor implements ItemProcessor<ResultSet, String>{
@Override
public String process(ResultSet item) throws Exception {
// transform the resultSet into a SQL INSERT
}
}
编辑:我知道查询结果的唯一方法是通过 ResultSet 元数据,所以我不能创建 POJO 并设置属性。
【问题讨论】:
-
如果就这么简单,请不要使用 Spring Batch。使用
JdbcTemplate和RowCallbackHandler并执行插入。如果您真的想使用 Spring Batch,请不要乱用结果,而是返回带有行结果的对象或映射,并使用JdbcItemWriter进行插入。 -
我目前从 ResultSet 及其元数据中执行此操作。但是我会处理数千行,所以我读到 Spring Batch 可以有效地处理它并且有工作来安排这个提取
-
我在哪里说您需要 POJO?你可以简单地返回
Maps 的列表而不是结果。您目前正在将组件用于他们不应该/设计做的事情。 -
我尝试使用 Map 来执行此操作,但这样我无法获取表的元数据,我需要该信息来构建 CREATE 表语句。
标签: java spring spring-data spring-batch