【问题标题】:How to synchronize data between a file and a database using Spring Batch?如何使用 Spring Batch 在文件和数据库之间同步数据?
【发布时间】:2015-11-17 17:20:23
【问题描述】:

我必须使用 Spring Batch 将文件 (Excel) 中的数据同步到数据库 (MySQL)。

文件将逐条处理。添加和更新数据库记录工作正常,但我想知道如何检测和删除从文件中删除的数据库条目?

我考虑实现这个:

  • 逐条读取文件
  • 在数据库中创建或更新记录并记住主键
  • 删除所有具有不同主键的记录(处理完所有记录后的最后一步)

您知道如何收集所有已处理的主键并将其传递到最后一步吗? 还是您推荐其他实现方式?

谢谢, 帕特里克

更新:我不允许更改数据库表。

【问题讨论】:

    标签: database spring file synchronization spring-batch


    【解决方案1】:

    使用列来标记更新/添加的记录。
    在主要步骤之后创建一个新的,您可以在其中删除未标记的记录。

    如果数据库架构修改不是一个选项:

    步骤 1. 将主键从 DB 转储到 CSV (original.csv)
    步骤 2. 创建/更新数据库并将更新数据的主键存储到 CSV (updated.CSV)
    在第 2 步之后。创建差异文件:原始减去更新后 (diff.CSV)
    Step 3. 读取diff.CSV,PK删除记录

    【讨论】:

    • 嗨卢卡,感谢您的回复。但是您的解决方案不是一种选择。我不允许更改架构。我确定有一些拦截器或其他可能性来收集所有已处理的项目,但我找不到它。
    • 在内存中存储数据会导致 OutOfMemoryError。检查我的编辑是否有帮助
    • 将 PK 存储在内存中不会有问题。我们有另一个类似的批处理过程(在没有 Spring Batch 的情况下实现)计算两个集合之间的差异,每个集合大约有 500.000 个对象 - 全部在内存中。这里讨论的解决方案的不同之处在于,创建和更新数据库记录也是基于我们生成的差异。使用临时 CSV 文件时,我们必须同步文件访问。我确信必须有更好的(内存中)解决方案。否则我必须一次处理所有数据。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-28
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多