|
|
1
6
我找到了这个问题的原因。结果是,方法B在被包装到事务中之前,使用了基于cglib的代理(使用Spring旧方法,2.0之前的版本)。所以当我从methodb中抛出runtimeexception时,cglib最终会抛出invocationTargetexception,这实际上是一个检查过的异常。 Spring的事务管理器最终捕获了选中的异常,并尝试提交该事务,而不知道methodb抛出的嵌套运行时异常。一旦我发现了这一点,我就设置了事务包装器来回滚检查过的异常,现在它可以按预期工作了。 |
|
|
2
5
你可以试着设置
如果事务被全局标记为仅回滚,则设置是否及早失败。 默认值为“false”,仅在最外层事务边界处导致意外的回滚异常。打开此标志可在第一次检测到全局仅回滚标记时(即使是从内部事务边界内)导致未预期的回滚异常。注意,从Spring2.0开始,全局仅回滚标记的早期失败行为已经统一:默认情况下,所有事务管理器将只在最外层事务边界处导致未预期的回滚异常。例如,这允许在操作失败后继续单元测试,并且事务将永远不会完成。只有当此标志显式设置为“真”时,所有事务管理器才会更早失败。 |