如何使用 Spring 批处理有效且正确地将顺序活动加载到数据库?
How to effectively and correctly load sequential activities to Database using Spring batch?
我目前正在从事一个将 .dat 文件信息加载到数据库的项目。但是,此 .dat 文件不仅包含数据,还包含操作。第一个字段表示记录的操作,其他所有只是数据。
以下是一些示例记录:
一个key1 key2 data1 data2
D 键1 键2 数据1 数据2
C 键1 键2 数据1 数据2
让,A=添加,D=删除,C=更新
文件大小约为 5GB。
在这种情况下,要处理的记录的顺序确实很重要。是否可以使用 Spring batch 来批量处理这个?前辈做的一个实现是创建3个list:addList、deleteList、updateList,分别为它们生成dml语句。虽然在加载时非常高效,但它不起作用,因为无论您以何种顺序执行这些列表,都可能导致数据不一致。所以为了保持数据有效,我相信这些记录必须按顺序执行。
我想到的一个解决方案是将 reader fetch-size 设置为 1。但这似乎违背了 spring 批处理的目的。
有更好的方法吗?也许不是 spring 批次而是其他东西?
您是否调查过 PatternMatchingCompositeLineTokenizer
https://docs.spring.io/spring-batch/trunk/apidocs/org/springframework/batch/item/file/mapping/PatternMatchingCompositeLineMapper.html
您应该能够使用以下组合实现此目的(同时保留记录顺序):
PatternMatchingCompositeLineMapper
: 根据您的模式(A、D 和 C)映射项目
ClassifierCompositeItemWriter
:配置了一个PatternMatchingClassifier
。这将根据项目的类型对项目进行分类,并使用相应的编写器(每种类型应该有一个编写器)来执行操作。
我目前正在从事一个将 .dat 文件信息加载到数据库的项目。但是,此 .dat 文件不仅包含数据,还包含操作。第一个字段表示记录的操作,其他所有只是数据。 以下是一些示例记录: 一个key1 key2 data1 data2 D 键1 键2 数据1 数据2 C 键1 键2 数据1 数据2
让,A=添加,D=删除,C=更新 文件大小约为 5GB。 在这种情况下,要处理的记录的顺序确实很重要。是否可以使用 Spring batch 来批量处理这个?前辈做的一个实现是创建3个list:addList、deleteList、updateList,分别为它们生成dml语句。虽然在加载时非常高效,但它不起作用,因为无论您以何种顺序执行这些列表,都可能导致数据不一致。所以为了保持数据有效,我相信这些记录必须按顺序执行。
我想到的一个解决方案是将 reader fetch-size 设置为 1。但这似乎违背了 spring 批处理的目的。
有更好的方法吗?也许不是 spring 批次而是其他东西?
您是否调查过 PatternMatchingCompositeLineTokenizer https://docs.spring.io/spring-batch/trunk/apidocs/org/springframework/batch/item/file/mapping/PatternMatchingCompositeLineMapper.html
您应该能够使用以下组合实现此目的(同时保留记录顺序):
PatternMatchingCompositeLineMapper
: 根据您的模式(A、D 和 C)映射项目ClassifierCompositeItemWriter
:配置了一个PatternMatchingClassifier
。这将根据项目的类型对项目进行分类,并使用相应的编写器(每种类型应该有一个编写器)来执行操作。