如何使用Spring批处理有效、正确地将顺序活动加载到数据库



我目前正在进行一个项目,将.dat文件信息加载到数据库中。但是,这个.dat文件不仅包含数据,还包含操作。第一个字段表示记录的操作,其他所有字段都只是数据。以下是一些记录示例:A key1 key2 data1 data2D键1键2数据1数据2C键1键2数据1数据2

let,A=添加,D=删除,C=更新文件大小大约为5GB。在这种情况下,要处理的记录的顺序确实很重要。是否可以使用Spring批处理来批量处理此问题?我的前任之前完成的一个实现是创建3个列表:addList、deleteList、updateList,并分别为它们生成dml语句。虽然加载时效率很高,但它不起作用,因为执行这些列表的顺序无关紧要,它可能会导致数据不一致。因此,为了保持数据的有效性,我认为这些记录必须按顺序执行。

我想出的一个解决方案是将读取器获取大小设置为1。但这似乎违背了春季批次的目的。

有更好的方法吗?也许不是春季批,而是别的什么?

您应该能够使用以下组合来实现这一点(同时保留记录顺序(:

  • PatternMatchingCompositeLineMapper:根据您的模式(A、D和C(映射项目
  • ClassifierCompositeItemWriter:配置有PatternMatchingClassifier。这将根据项目的类型对其进行分类,并使用相应的编写器(每个类型应该有一个编写器(来执行操作

您调查过PatternMatchingCompositeLineTokenizer吗https://docs.spring.io/spring-batch/trunk/apidocs/org/springframework/batch/item/file/mapping/PatternMatchingCompositeLineMapper.html

最新更新