@Transactional 无效原因

Posted prettrywork

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了@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中

尝试了一下,有效。

 

 

以上是关于@Transactional 无效原因的主要内容,如果未能解决你的问题,请参考以下文章

@Transactional注解事务不回滚不起作用无效

Spring @Transactional注解不回滚不起作用无效

导致弃用警告的原因是:ActiveRecord :: Base.raise_in_transactional_callbacks =?

@Transactional 在我的 Spring Boot 应用程序中无效

springboot项目中,@transactional 无效

@Transactional事务不起作用原因