我目前正在开发一个将 .dat 文件信息加载到数据库的项目。但是,此 .dat 文件不仅包含数据,还包含操作。第一个字段表示记录的操作,其他字段只是数据。 以下是一些记录示例: A 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语句。虽然加载时非常高效,但是它不起作用,因为无论您执行这些列表的顺序如何,都可能会导致数据不一致。因此,为了保持数据有效,我认为这些记录必须按顺序执行。
我提出的一个解决方案是将 reader fetch-size 设置为 1。但这似乎违背了 Spring Batch 的目的。
有更好的方法吗?也许不是 Spring 批处理而是其他东西?
最佳答案
您应该能够使用以下组合来实现此目的(同时保留记录顺序):
PatternMatchingCompositeLineMapper
:根据您的模式(A、D 和 C)映射项目ClassifierCompositeItemWriter
:使用PatternMatchingClassifier
配置。这将根据项目的类型对项目进行分类,并使用相应的编写器(每种类型应该有一个编写器)来执行操作。
关于java - 如何使用Spring批处理有效且正确地将顺序 Activity 加载到数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51736320/