Spring Batch,chunk处理并尝试在块回滚时恢复非事务性更改

时间:2013-09-30 08:41:54

标签: spring-batch

我有一个块处理步骤:

  • 1)在数据库中创建用户
  • 2)通过HTTP调用
  • 在远程系统上打开一个帐户

我们支付远程系统上的帐户,并且在批处理失败期间,我们希望避免创建永远不会使用的远程帐户,因为用户已在我们的数据库中回滚...

如果我的块大小为100,那么如果在第50个项的远程调用期间发生异常,那么我的业务逻辑可以捕获该异常,尝试关闭该特定项的远程帐户,并且然后重新抛出异常以触发块回滚。

但是,对于之前处理的第49个项目,数据库中的用户将被回滚,但帐户将不会被关闭。

因此,将在数据库上回滚50个用户,但只会关闭一个远程帐户。

如何组织我的步骤以关闭50个远程帐户(如果此手动回滚失败,则不是一致性问题:尽力而为)

1 个答案:

答案 0 :(得分:0)

关闭不需要的帐户的额外步骤怎么办?每个已打开的帐户都存储在其自己的事务中的额外表(OPENED_ACCOUNT)中,因此不会通过spring-batch回滚。
清理步骤将按照OPENED_ACCOUNT中存储的数据运行,您可以在出错时重新启动,管理自定义重试操作等。