有三个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事务特性设置代理如下:
<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>
解决方案 »
- webservices客户端生成
- 如何在网页中添加视频
- JPA级联删除不行,求高人帮忙
- JMX 获得WEBLOGIC的数据库连接
- 参数转码
- struts2错误InvocationTargetException
- 数据库中取中文
- weblogic.jndi.WLInitialContextFactory和Could not find the main class错误
- 关于blueprints 和 struts 两种waf,欢迎大家热烈发表看法.
- spring+hibernate集成
- Wabacus!超火的Java开发框架。。。
- WebSphere集群上如何配置多server的LOG4J日志文件输出
第二、你service3出异常导致service2的事务回滚,如果service2没有try{service3()}catch{},那么异常将继续抛出,所以service2也方法也会抛出异常。此时如果如果service1没有try{service2()}catch{},那么异常将继续向上层抛出,所以service1也方法也会抛出异常。Spring框架发现service1方法抛出了异常,按照你的配置,就把service1的事务也回滚了