spring + mybatis 注解 @Transactional失效
Posted 随意的马蒂洛克
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring + mybatis 注解 @Transactional失效相关的知识,希望对你有一定的参考价值。
1.问题
在使用@Transactional注解管理事务的时候会出现很多错误,比如:
*** was not registered for synchronization because synchronization is not active 或者 Closing non transactional SqlSession [[email protected]]
JDBC Connection [[email protected]] will not be managed by Spring
总之就是事务没有被spring管理,注解@Transactional失效.
2.原因:
重复扫描包的问题. 因为springmvc的配置文件已经扫描了service和controller注解,而spring的配置文件又扫描了一遍,所以会出错.
spring 通过 cglib 生成了带有事务功能的代理类.
但是spring mvc 在扫描一遍又重新生成了 service 层的不带事务功能的代理类,把之前的代理类给覆盖掉了,
所以会导致事务失效.
因此解决就是把springmvc扫描service给过滤掉就可以了,
3.解决:
让springmvc的配置文件只扫描controller
<context:component-scan base-package="com.fyq" > <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service" /> </context:component-scan>
通过 filter 把service注解给过滤掉.
同理 spring 的配置文件只扫描service层,把controller给过滤掉.
<context:component-scan base-package="com.fyq" > <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" /> </context:component-scan>
该用spring-boot了...
以上是关于spring + mybatis 注解 @Transactional失效的主要内容,如果未能解决你的问题,请参考以下文章
Spring boot 学习六 spring 继承 mybatis (基于注解)