Spring 活动+;弹簧&x2B;交易&x2B;回降

Spring 活动+;弹簧&x2B;交易&x2B;回降,spring,transactions,rollback,activiti,Spring,Transactions,Rollback,Activiti,我想测试Spring和Activiti的集成,然后我遇到了令人困惑的问题。我有一个带有2个服务任务的工作流(使用jpa存储库saveAndFlush方法更新数据库)a和B 在服务A中,我主动抛出一个新异常,然后事务回滚,流停止。好吧,没关系 但是,如何仅回滚服务A而流继续回滚到服务B? 因为如果服务A抛出异常,流将停止,如果捕获到异常(然后流继续),服务A将不会回滚 我使用JPA存储库来自动处理事务,因此现在更改为手动模式将需要很多努力。可能您需要为流中的每个服务创建一个新事务,并捕获所有异常。

我想测试Spring和Activiti的集成,然后我遇到了令人困惑的问题。我有一个带有2个服务任务的工作流(使用jpa存储库saveAndFlush方法更新数据库)a和B

在服务A中,我主动抛出一个新异常,然后事务回滚,流停止。好吧,没关系

但是,如何仅回滚服务A而流继续回滚到服务B? 因为如果服务A抛出异常,流将停止,如果捕获到异常(然后流继续),服务A将不会回滚


我使用JPA存储库来自动处理事务,因此现在更改为手动模式将需要很多努力。

可能您需要为流中的每个服务创建一个新事务,并捕获所有异常。

在服务任务a、B和流程之间添加一层,让我们命名为
TransactionService
。此服务应触发您的服务方法。这些服务方法还应该使用新事务进行操作(您可以使用
@Transactional
注释)。在
TransactionService
中,不要做任何事情,只需触发它们并将它们包装在try-catch块中即可。

因此,您可以捕获异常并使其流向下一个任务,而不关心回滚,因为异常发生后,它将自动回滚。

正如我前面所说,如果我不抛出异常,事务将不会回滚,但如果我这样做,工作流将立即停止。