转: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的配置中。事务不回滚的问题就能解决了。
如果还有其他的不清楚的可以看我转载的博客,写的很清楚。