我正在尝试编写一个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;
}
}
问题是,在我收到所有内容后,当我收到不同的项目时,我会返回,但我该如何处理最后一项?当我收到最后一项时,我需要一种在处理器中知道的方法,这样我就可以立即返回合并而不是等待下一行。
提前致谢