Spring-spring事务调用及回滚

发布于 2016-10-25 22:25:33 字数 734 浏览 1825 评论 1

有三个service,分别为service1,service2,service3,分别采用的事务特性是REQUIRED,REQUIRES_NEW,REQUIRED,其中service1调用service2,service2调用service3,然后在service3中出现错误,想问service3使用的是service1的事务,还是service2的事务?为何事务回滚后service1,service2均被影响,数据库全都不添加数据?
spring事务特性设置代理如下:
tx:attributes>

<tx:method name="service1" propagation="REQUIRED" read-only="false"
rollback-for="java.lang.Exception" />
<tx:method name="service2" propagation="REQUIRES_NEW" read-only="false"
rollback-for="java.lang.Exception" />
<tx:method name="service2" propagation="REQUIRED" read-only="false"
rollback-for="java.lang.Exception" />

</tx:attributes>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

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

发布评论

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

评论(1

归属感 2017-10-25 08:18:15

好了, 终于成功了, 呵呵

根据我的经验(教训), 可能有下面两个原因:
1. 如果你在service1()方法里直接调用service2(), 因为Spring是一个AOP框架, 这种情况下Spring没有机会把service2()加入transaction中; 必须有通过Spring的框架接口调用service2():

BeanFactory factory = (BeanFactory) context;
DAO mDAO = (DAO) factory.getBean("memberdao") ;
mDAO.service2();

2. 当service3()抛出异常后, 此异常被传到service2(), service1(), 如果没有在service1()中加入异常处理, service1()也被回滚.

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