Spring Batch - 在处理器中聚合多行

时间:2018-06-15 03:04:25

标签: spring-batch


我正在尝试编写一个Spring Batch应用程序,它从数据库中获取大量数据并将其写入Excel。在这个过程中,我需要将一些行中的数据转换成列 所以想象一下返回的查询:

id,name,value
1, me, 1
1, me, 3
1, me, 2
2, you, 4
3, her, 5

我的excel看起来像:

1, me, 1, 2, 3
2, you, 4
3, her, 5

请注意,在将行转换为列时,我也会对值进行排序,因此在SQL中执行此转置操作有点棘手。
我的想法是创建一个ItemReader,将每行作为对象返回,然后在处理器中将分组行合并为一个对象,以及一个获取此DTO并写入Excel的ExcelWriter。 要实现处理器,我会做类似的事情:

private ConsolidatedDTO consolidatedDTO = new ConsolidatedDTO();

public ConsolidatedDTO process(AnaliticDTO item) {
  if (consolidatedDTO.getKey().equals(item.getKey)) {
     consolidatedDTO.add(item);
  } else {
     ConsolidatedDTO result = consolidatedDTO;
     consolidatedDTO = new ConsolidatedDTO(item);
     return result;
  }
}

问题是,在我收到所有内容后,当我收到不同的项目时,我会返回,但我该如何处理最后一项?当我收到最后一项时,我需要一种在处理器中知道的方法,这样我就可以立即返回合并而不是等待下一行。

提前致谢

0 个答案:

没有答案