注:整合时如果发现无法进行update/delete情况的朋友们可以看一下本文。
原因:spring在加载时首先是加载spring框架声明的bean,也就是说最开始的时候带有事务管理的service类是加载了的,然后加载springMVC的类,这时候由于我在springMVC的包扫描配置的地方并没有过滤而是全局扫描注解,然后扫描到之前已经加载了的service类时,又生成了一遍,并且spring有这种机制如果子容器中有父容器相同的类那么将默认使子容器自己的类,这里的service并没有经过事务处理因为是由springMVC生成的,那么在springMVC的controller调用的时候自然也就没有事务了;
解决:
1. 将原本写在springMVC的配置文件中的<context:component-scan>及注解驱动等内容移动到spring的配置文件中;
2. 添加事务的注解驱动,开启事务注解功能
<tx:annotation-driven transaction-manager="transactionManager"></tx:annotation-driven>
注:transactionManager为事务bean的id;
3. 在service层或dao层新增注解:
@Transactional(propagation = Propagation.REQUIRED)
若标记在类上,则表明此类所有方法都进行事务处理;
PS:使用此方法后,无需在spring的配置文件中另行配置事务属性以及切点;