0

我有一个块处理步骤:

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

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

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

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

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

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

4

1 回答 1

0

关闭不需要的帐户的额外步骤怎么样?每个开立的帐户都存储在自己的事务中的额外表(OPENED_ACCOUNT)中,因此不会被 spring-batch 回滚。
清理步骤将根据存储的数据进行操作OPENED_ACCOUNT,您可以在错误时重新启动,管理自定义重试操作等。

于 2013-09-30T13:57:53.507 回答