在我的Grails 2.3.9代码中,可以抛出异常,但这不会导致事务失败。
此流是ServiceA.serviceA()
通过另外几个服务间接调用ServiceB.serviceB()
。 ServiceB.serviceB()
抛出异常。其他几个服务调用ServiceB.serviceB()
,但我只想让Transaction在调用时不会失败。
这就是我的尝试:
ServiceA.serviceA()
@Transactional(noRollbackFor=[MyException.class])
ServiceA
static transactional=false
醇>
都没有工作。
我也试试:
ServiceB.serviceB()
标有@Transactional(noRollbackFor=[MyException.class])
ServiceB
标有static transactional=false
static transactional = false
醇>
为了测试这个,我正在运行spock集成测试。为了确保集成测试是事务性的,我static transactional = false
位于集成测试的顶部。
我设法使其工作的唯一方法是将ServiceA和ServiceB之间的所有服务都设为org.springframework.transaction.UnexpectedRollbackException: Transaction rolled back because it has been marked as rollback-only
at GrailsMelodyGrailsPlugin$_closure4_closure15_closure16.doCall(GrailsMelodyGrailsPlugin.groovy:165)
否则我看到了:
{{1}}
这是唯一的解决方案吗?