spring@Transactional事务失效

转:https://blog.csdn.net/zjcjava/article/details/60766571

弄了一个项目,验证事务的时候,老是不会滚,最后竟然发现是配置文件配错了,应该把事务配置在spring.xml中,

配置文件扫描的问题
因为spring的容器(applicationContext)和springMVC的(applicationContext)是不同的。

spring容器加载得时候,优先加载ServletContextListener(对应spring.xml)产生的父容器,而springMVC(对应springMVC.xml)产生的是子容器。子容器Controller进行扫描装配时装配的@Service注解的实例是没有经过事务加强处理,

即没有事务处理能力的Service。而父容器进行初始化的Service是保证事务的增强处理能力的。如果不在子容器中将Service除去掉,此时得到的将是原样的无事务处理能力的Service。

所以,我们应把扫描Service的工作放在spring.xml中。让Service和事务注解存在于同一个容器中,这样配置的事务注解就能起作用了。也就是说把这个配置从

springMVC.xml中移到spring.xml的配置中。事务不回滚的问题就能解决了。

如果还有其他的不清楚的可以看我转载的博客,写的很清楚。

猜你喜欢

转载自blog.csdn.net/fly_grass_fish/article/details/82895437