我有一个使用Spring Boot和Spring Batch的要求,我需要从一个数据库中读取数据,该数据库返回如下记录
Id1 Select * from Table1
Id2 Select * from Table2
每个查询将在不同的数据库中执行,并将返回超过10万条记录 以下是我遇到的疑问
将查询传递给阅读器(即从一个步骤转移到另一步骤)
动态读取查询并使用JdbcPagingItemReader
获取记录,因为每个查询将返回> 100k条记录并使用项目编写器进行写入。
所有查询将返回相同的项目/ pojo。
答案 0 :(得分:0)
第一个查询返回的列值又是一个sql查询,需要在另一个数据库中执行并通过分页读取并将它们插入第一个数据库中
在这种情况下,您可以分两步进行:
答案 1 :(得分:0)
必须使用Placeholder(?)
创建查询* EX Query-SELECT * FROM PRODUCT WHERE status =? AND name =?*
创建ItemStreamReader:-
SingleInstance
为PreparedStatementSetter接口创建一个Implementer类
@Bean
public ItemStreamReader<Product> reader() {
JdbcCursorItemReader<Product> reader = new JdbcCursorItemReader<>();
reader.setDataSource(DataSource);
reader.setSql(SELECT_QUERY);
reader.setPreparedStatementSetter(new InputSetter());
reader.setRowMapper(new BeanPropertyRowMapper<>(Product.class));
return reader;
}
}