我目前正在一个项目中,将.dat文件信息加载到数据库中。但是,此.dat文件不仅包含数据,而且还包含操作。第一个字段指示记录的操作,其他所有字段仅是数据。 以下是一些示例记录: Key1 key2 data1 data2 D键1键2数据1数据2 C key1 key2 data1 data2
let,A =添加,D =删除,C =更新 文件大小约为5GB。 在这种情况下,要处理的记录的顺序很重要。可以使用Spring批处理对此进行批处理吗?我的前任所做的以前的实现是创建3个列表:addList,deleteList,updateList,并分别为它们生成dml语句。尽管在加载时非常高效,但由于执行这些列表的顺序无关紧要,因此无法正常工作,但可能会导致数据不一致。因此,为了保持数据有效,我相信这些记录必须按顺序执行。
我想出的一个解决方案是将读取器的访存大小设置为1。但这似乎违背了spring batch的目的。
是否有更好的方法可以做到这一点?也许不是春季批处理,而是其他?
答案 0 :(得分:1)
您是否调查过PatternMatchingCompositeLineTokenizer https://docs.spring.io/spring-batch/trunk/apidocs/org/springframework/batch/item/file/mapping/PatternMatchingCompositeLineMapper.html
答案 1 :(得分:1)
您应该能够(同时保留记录顺序)使用以下组合来实现:
PatternMatchingCompositeLineMapper
:根据样式(A,D和C)映射项目ClassifierCompositeItemWriter
:配置为PatternMatchingClassifier
。这将根据项目的类型对项目进行分类,并使用相应的作者(每种类型应有一位作者)来执行操作。