Spring AOP 声明式事务管理器
在 Spring 声明式事务管理器中: 我的配置 tx:method:
<tx:method name="handle*" propagation="REQUIRED" no-rollback-for="java.lang.RuntimeException" rollback-for="java.lang.Exception" read-only="false"/>
Spring
rollback-for 文档是:将触发回滚的异常;以逗号分隔。例如,'com.foo.MyBusinessException,ServletException'
no-rollback-for 文档是: 不会触发回滚的异常;以逗号分隔。例如,'com.foo.MyBusinessException,ServletException'
我希望事务管理器在捕获 java.lang.Exception 时回滚,但 java.lang.RuntimeException 将导致提交。
这个配置可以满足我的要求吗? tx:advice 的 tx:method 中的 no-rollback-for 和 rollback-for 有什么关系?
In the Spring declarative transaction manager:
My configuration tx:method:
<tx:method name="handle*" propagation="REQUIRED" no-rollback-for="java.lang.RuntimeException" rollback-for="java.lang.Exception" read-only="false"/>
Spring
rollback-for documentation is : The Exception(s) that will trigger rollback; comma-delimited. For example, 'com.foo.MyBusinessException,ServletException'
no-rollback-for documentation is: The Exception(s) that will not trigger rollback; comma-delimited. For example, 'com.foo.MyBusinessException,ServletException'
I want the transaction manager rollback when catch the java.lang.Exception but the java.lang.RuntimeException will result commit.
Is this configuration work for my request?
what relationship about : no-rollback-for and rollback-for in tx:method of tx:advice?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
简而言之,
它可以满足您的需求。
与 concreate 抛出异常匹配的最具体的(不)回滚规则获胜。
这意味着如果您有异常层次结构并且回滚规则
然后A、B、E、F 类抛出的异常会回滚,但 C 和 D 类不会回滚。
(它在
RuleBasedTransactionAttribute.rollBackOn(Throwable ex)
中实现)In short
It does what you want.
The most specific (no)-rollback-for rule that match the concreate throwing exception is winning.
This mean if you have an exception hierarchy and the rollback rules
Then an thrown exception of class A, B, E and F will rollback, but C and D will not.
(It is implemented in
RuleBasedTransactionAttribute.rollBackOn(Throwable ex)
)