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>

spring

urusai 11 years, 8 months ago

好了, 终于成功了, 呵呵

根据我的经验(教训), 可能有下面两个原因:
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()也被回滚.

永远D风雅 answered 11 years, 8 months ago

Your Answer