Spring AOP声明事务管理器

时间:2011-08-03 05:34:46

标签: spring transactions aop jta

在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的方法?

1 个答案:

答案 0 :(得分:0)

简而言之

它做你想要的。


与concreate throw异常匹配的最具体(no)-rollback-for规则就是胜利。

这意味着如果您有异常层次结构和回滚规则

  • A(扩展例外)&lt; - rollback
  • B延伸A
  • C扩展B&lt; - no rollback
  • D延伸C
  • E延伸D&lt; - rollback
  • F延伸E

然后,A,B,E和F类的抛出异常将回滚,但C和D不会回滚。

(在RuleBasedTransactionAttribute.rollBackOn(Throwable ex)中实施)