我目前正在进行一个项目,将.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