【问题标题】:Committing to database during process phase in spring batch job在春季批处理作业的流程阶段提交到数据库
【发布时间】:2012-03-23 22:40:00
【问题描述】:

我有一个传统的 spring-batch 作业,我从数据库中读取,处理域对象并将其写入文件。

我需要在处理器阶段稍微调整功能,以便我可以更新域对象并将其提交到数据库并将其写入文件。我需要立即提交,因为我需要数据库 ID 用于写入阶段。

当我尝试更新域对象并保存它时,我注意到实体在写入阶段之后被提交。

有什么方法可以强制提交在处理器阶段立即发生并像以前一样继续?

【问题讨论】:

    标签: spring-batch


    【解决方案1】:

    我需要立即提交,因为我需要 写入阶段的数据库 ID。

    当您尝试更新(现有)条目时,我不确定您需要什么 id,因为您应该已经有了一个

    如果您的意思是插入,您可以通过使用数据库特定函数来获取已插入但尚未提交的对象的 id 来解决此问题

    例如对于甲骨文 - Obtain id of an insert in the same statement

    当我尝试更新域对象并保存它时,我注意到 实体在写入阶段后被提交。

    这是期望的行为,因为写入部分是(块)事务中的最后一个,如果成功 - 提交,如果不成功 - 回滚,想象一个成功的提交和文件问题,文件中的项目数据库会有错误的状态

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-17
      • 2012-10-19
      • 1970-01-01
      • 2019-01-28
      • 1970-01-01
      • 2020-07-23
      相关资源
      最近更新 更多