Java 规则。在作业级别对spring批处理作业的事务支持

Java 规则。在作业级别对spring批处理作业的事务支持,java,spring,postgresql,spring-batch,spring-batch-admin,Java,Spring,Postgresql,Spring Batch,Spring Batch Admin,假设我需要执行一个包含2个步骤的spring批处理作业。步骤1是从postgres表读取数据并更新同一表中的值。步骤2是从另一个postgres表读取数据并更新此表。如何在此场景中实现作业级别的事务 也就是说,如果第二步失败,那么应该回滚第一步 在步骤1之前放一个开始语句,在步骤2之后放一个提交语句。我不确定是否存在一个具有自动链式/多级事务处理的可靠解决方案(或者不需要数据库端的大量资源) 如果第二步失败,则应回滚第一步 您可以将这两个步骤合并为一个步骤: 从第一个表A中读取 使用处理器更新

假设我需要执行一个包含2个步骤的spring批处理作业。步骤1是从postgres表读取数据并更新同一表中的值。步骤2是从另一个postgres表读取数据并更新此表。如何在此场景中实现作业级别的事务


也就是说,如果第二步失败,那么应该回滚第一步

在步骤1之前放一个开始语句,在步骤2之后放一个提交语句。

我不确定是否存在一个具有自动链式/多级事务处理的可靠解决方案(或者不需要数据库端的大量资源)

如果第二步失败,则应回滚第一步

您可以将这两个步骤合并为一个步骤:

  • 从第一个表A中读取
  • 使用处理器更新表A
  • 使用处理器读取表B
  • 使用writer更新表B
性能将受到很大影响,因为表B上的读取将是单次读取,而表a则是基于光标的读取

我会采取这样的补偿策略

  • (可选)使用中的表是临时表,而不是真正的“生产”表,这使得通过将数据存储与生产分离来进行补偿更加容易
  • 作业或其他作业/脚本
  • 此步骤/作业/脚本根据需要删除(行或完整表)

您是否考虑过使用工作级别事务性


<> P>重要的是考虑你正在管理的潜在体积大小,以避免超出限制提交或回滚。< /P>这不是Spring批处理与事务一起工作的情况,事务划分发生在工作单位的单位(AKA提交率)上,步骤高于此级别是否可以在单个步骤中包含多个微线程或块?如果是,那么我们可以将上述两个任务表示为单个步骤下的两个Tasklet,这可以由事务管理器控制。Tasklet是一个简化的步骤,而step是一个域对象,它封装了批处理作业的一个独立、连续的阶段