我有一个块处理步骤:
我们支付远程系统上的帐户,并且在批处理失败期间,我们希望避免创建永远不会使用的远程帐户,因为用户已在我们的数据库中回滚...
如果我的块大小为100,那么如果在第50个项的远程调用期间发生异常,那么我的业务逻辑可以捕获该异常,尝试关闭该特定项的远程帐户,并且然后重新抛出异常以触发块回滚。
但是,对于之前处理的第49个项目,数据库中的用户将被回滚,但帐户将不会被关闭。
因此,将在数据库上回滚50个用户,但只会关闭一个远程帐户。
如何组织我的步骤以关闭50个远程帐户(如果此手动回滚失败,则不是一致性问题:尽力而为)
答案 0 :(得分:0)
关闭不需要的帐户的额外步骤怎么办?每个已打开的帐户都存储在其自己的事务中的额外表(OPENED_ACCOUNT
)中,因此不会通过spring-batch回滚。
清理步骤将按照OPENED_ACCOUNT
中存储的数据运行,您可以在出错时重新启动,管理自定义重试操作等。