Spring AOP 声明式事务管理器

发布于 2024-11-27 18:29:39 字数 588 浏览 2 评论 0原文

在 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

不再见 2024-12-04 18:29:39

简而言之,

它可以满足您的需求。


与 concreate 抛出异常匹配的最具体的(不)回滚规则获胜。

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

  • A (extends Exception) <-- 回滚
  • B 扩展 A
  • C 扩展 B <-- 无回滚
  • D 扩展 C
  • E 扩展 D <-- 回滚
  • F 扩展 E

然后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

  • A (extends Exception) <-- rollback
  • B extends A
  • C extends B <-- no rollback
  • D extends C
  • E extends D <-- rollback
  • F extends E

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))

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文