@Transactional 无效原因

在controller 上面使用  @Transactional 注解时候发现数据没有回滚,在执行完update 更新语句,事务直接就commit 了,

此时方法尚未执行结束,数据库数据已经更新了。

第一反应应该是配置文件有问题,自己检查了spring.xml 和spring-mvc.xml文件,配置文件没什么问题。

在pring.mvc中  <tx:annotation-driven transaction-manager="transactionManager" />  也是有的

并且自动扫描了 service 层文件。百思不得其解

网上查询资料:导致该注解无效的原理多种多样,没有一种和我的是一样的。

有的说spring.xml和spring-mvc.xml 两个配置文件都对controller 或者 service 层进行了扫描,出现扫描重复,这种情况会导致

@Transactional 注解无效,但我的不属于这种情况,

还有的说,在同一个类中 ,一个没有配置@Transactiona 注解的方法,调用了令一个配置了@Transactiona 注解的方法,导致该注解无效。

我的也不属于这种情况。

还有的说,方法修饰符没有用public。。

这些都会导致该注解无效,但是我的不属于这些情况。

偶然尝试,在sevice 层接口实现类上面,配置了 @Transactional  debug 调试发现,数据回滚了,注解起作用了。

原来这个注解需要用在service 接口实现类 impl 中。

后来查资料:

若要@Transactional  注解配置了controller 层,需要将开启事务注解方式的 方式即:<tx:annotation-driven transaction-manager="transactionManager" /> 增加在spring-mvc.xml中

尝试了一下,有效。


原文地址:https://www.cnblogs.com/prettrywork/p/9969849.html