这是我在SpringBatch中使用SpringBoot的第一个代码,我正在实现一个示例用例。
这是我想在SpringBatch中实现的确切伪代码,请您帮忙:
一次获取所有酒店详细信息(> 300万条记录)并进行处理是不可行的,因此我决定一次获取1家酒店(50,000条记录)并进行处理并将其写入数据库。想要对每个hotelID重复此步骤,如下所述。这个用例适合SpringBatch吗?
List<Integer> allHotelIDs = execute("select distinct(hotelid) from Hotels");
List items = new Arraylist();
allHotelIDs.forEach(hotelID -> {
Object item = itemReader.jdbcReader(hotelID, dataSource);
Object processedItem = itemProcessor.process(item);
items.add(processedItem);
});
itemWriter.write(items);
我只能传递1个hotelid,如何为所有列出的酒店多次调用它?
@Bean
Job job(JobBuilderFactory jbf, StepBuilderFactory sbf, DBReaderWriter step1) throws Exception {
Step db2db = sbf.get("db-db").<Table, List<Tendency>>chunk(1000)
.reader(step1.jdbcReader(hotelID, dataSource))
.processor(processor())
.writer(receivableWriter()).build();
return jbf.get("etl").incrementer(new RunIdIncrementer()).start(db2db).build();
}
阅读器代码:
@Configuration
public class DBReader {
@Bean
public ItemReader<Table> jdbcReader(Integer hotelID, DataSource dataSource) {
return new JdbcCursorItemReaderBuilder<Table>().dataSource(dataSource).name("jdbc-reader")
.sql("SELECT * FROM Hotels where hotelid ="+hotelID).rowMapper((rs, i) -> {
return read().db(rs, "Hotels");
}).build();
}
}
谢谢。