关于spring中事务不回滚的解决方式

关于spring中事务不回滚的问题,网上查了很多资料,基本有如下可能性:


假如我们把事务加到Service层:


1.Service层的方法我们try...catch了,导致AOP捕获不到异常. 所以事务控制失败. 

解决方式: 不要在Service层try...catch即可. 

  或在catch块最后加上"throw new RuntimeException()".这样一场才能被AOP捕获.(个人未尝试)

2.数据库问题,mysql为绿色版,或不支持回滚.可以尝试安装正式版.


但是本人在排除以上问题后,发现事务依然无法回滚.


经过分析,发现自己的项目中,在spring的dao配置文件中,由于业务需要,配置了双数据库切换模式.

配置片段如下:













       
       
           
               
               
           

       

 


可以看到,sqlSessionFactory这个bean里,dataSource字段引用的是multipleDataSource这个bean,而不是传统上常用的普通dataSource.

所以,我把第二个bean:multipleDataSource注释掉,把sqlSessionFactory的dataSource字段所引用的bean改成:dataSource之后,事务顺利回滚!

注:multipleDataSource这个bean是专用于切换双数据库的.


总结:

spring无论是声明式事务回滚,还是注解式,它的事务管理,主要是针对于单个数据库配置而发生作用的.

如果没有时间深入了解spring如何针对双数据库而配置事务管理的话,可以暂时把数据库改为一个.

你可能感兴趣的:(原创)