如何使用jdbcpagingitemreader返回列表

pieyvz9o  于 2021-09-13  发布在  Java
关注(0)|答案(1)|浏览(362)

我需要在我的项目中使用jdbcpagingitemreader,因为分页要求是强制性的
如何批量处理这些对象而不是逐个处理?
我希望读取器向处理器返回对象列表,而不是单个对象
我需要jdbcpagingitemreader将对象列表返回给处理器
我不知道如何让它工作,你有什么想法或例子吗?
下面是我的例子

  1. @Bean
  2. public Job batchUpdateInsiteGoodsJob(){
  3. return jobBuilderFactory.get("batchUpdateInsiteGoodsJob")
  4. .incrementer(new RunIdIncrementer())
  5. .listener(importGoodByExcelJobListener)
  6. .start(batchUpdateInsiteGoodsStep())
  7. .build();
  8. }
  9. @Bean
  10. public Step batchUpdateInsiteGoodsStep() {
  11. return stepBuilderFactory.get("batchUpdateInsiteGoodsJob")
  12. .<Long,List<Goods>>chunk(10)
  13. .reader(batchUpdateInsiteGoodsReader())
  14. .processor(batchUpdateInsiteGoodsPorcessor)
  15. .writer(batchUpdateInsiteGoodsWriter)
  16. .faultTolerant().skip(Exception.class).skipLimit(100)
  17. .build();
  18. }
  19. @Bean
  20. public JdbcPagingItemReader<Long> batchUpdateInsiteGoodsReader() {
  21. JdbcPagingItemReader<Long> reader = new JdbcPagingItemReader<>();
  22. reader.setDataSource(dataSource);
  23. reader.setFetchSize(100);
  24. reader.setRowMapper(new RowMapper<Long>() {
  25. @Override
  26. public Long mapRow(ResultSet rs, int i) throws SQLException {
  27. Console.log("get id"+rs.getLong("id"));//here is the question,how can I make it return a List not a singe
  28. return rs.getLong("id");
  29. }
  30. });
  31. MySqlPagingQueryProvider provider = new MySqlPagingQueryProvider();
  32. provider.setSelectClause("id");
  33. provider.setFromClause("from tb_goods");
  34. provider.setWhereClause("status = 2 and is_remove = 0 and is_live = 1 and type = 1 and tb_commission_ration = 10");
  35. Map<String, Order> sort = new HashMap<>(1);
  36. sort.put("id", Order.ASCENDING);
  37. provider.setSortKeys(sort);
  38. reader.setQueryProvider(provider);
  39. return reader;
  40. @Service
  41. public class BatchUpdateInsiteGoodsPorcessor implements ItemProcessor<Long,List<Goods>> {
  42. @Override
  43. public List<Goods> process(Long aLong) throws Exception {
  44. Console.log("get a Long"+aLong);
  45. return null;
  46. }

}
如何使读取器向itemprocessor返回列表

  1. @Service
  2. public class BatchUpdateInsiteGoodsPorcessor implements ItemProcessor<List<Long>,List<Goods>> {
  3. @Override
  4. public List<Goods> process(List<Long> aLong) throws Exception {
  5. Console.log("get a LongList"+aLong);
  6. return null;
  7. }

}

yhived7q

yhived7q1#

如果您正在寻找示例,通常一个好的开始方法是阅读相关类的文档。在本例中,它将我指向docs.spring.io,这有助于对
官方指南附有示例。

相关问题