java - 如何使用Spring批处理有效且正确地将顺序 Activity 加载到数据库?

标签 java spring spring-boot spring-batch batch-processing

我目前正在开发一个将 .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/

相关文章:

java - 使用 LWJGL 的 VBO 导致 JVM 崩溃

java - 发送 DELETE 时实现状态 200

Spring Boot 在集成测试期间不解析 application.properties 中的自定义属性

spring - spring-boot 是否支持任何动态 OLAP 报告生成工具?

java - 如何处理应用程序运行时数据库关闭时发生的 MySQL CommunicationException

java - SSL 握手错误 javax.net.ssl.SSLHandshakeException Received fatal alert bad_certificate

java - Spring Autowired 和 Builder 注释

java - 二分查找中的最大键比较 (1+log(n)) 为何不是 log(n)?

java - 无法访问应用程序中的 h2 数据库文件

java - 发送 POST 请求或尝试更新时出现 org.springframework.http.converter.HttpMessageNotReadableException