在Spring声明式事务管理器中: 我的配置tx:方法:
<tx:method name="handle*" propagation="REQUIRED" no-rollback-for="java.lang.RuntimeException" rollback-for="java.lang.Exception" read-only="false"/>
弹簧
rollback-for documentation是:将触发回滚的异常;逗号分隔。例如,'com.foo.MyBusinessException,ServletException'
no-rollback-for documentation is:不触发回滚的异常;逗号分隔。例如,'com.foo.MyBusinessException,ServletException'
我希望在捕获java.lang.Exception时事务管理器回滚,但java.lang.RuntimeException将导致提交。
此配置是否适用于我的请求? 什么关系:tx中的no-rollback-for和rollback-for:tx:advice的方法?
答案 0 :(得分:0)
简而言之
它做你想要的。
与concreate throw异常匹配的最具体(no)-rollback-for规则就是胜利。
这意味着如果您有异常层次结构和回滚规则
然后,A,B,E和F类的抛出异常将回滚,但C和D不会回滚。
(在RuleBasedTransactionAttribute.rollBackOn(Throwable ex)
中实施)