Spring-spring事务调用及回滚
有三个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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
好了, 终于成功了, 呵呵
根据我的经验(教训), 可能有下面两个原因:
1. 如果你在service1()方法里直接调用service2(), 因为Spring是一个AOP框架, 这种情况下Spring没有机会把service2()加入transaction中; 必须有通过Spring的框架接口调用service2():
2. 当service3()抛出异常后, 此异常被传到service2(), service1(), 如果没有在service1()中加入异常处理, service1()也被回滚.