MyBatis和SpringMVC集成事务在Junit测试下有效但是在实际项目无效的问题
2016-09-10 11:45
561 查看
一、问题说明
项目框架采用SSM,集成了事务回滚(方式见下),在单元测试的时候,测试事务是有效的,但是在实际项目上线的时候,却没有效果。二、集成方式
application-mybatis.xml(以下xml屏蔽了一些无关的细节)<!-- 数据连接池 --> <bean id="datasource" class="com.alibaba.druid.pool.DruidDataSource"> <property name="driverClassName" value="${jdbc.driver.dev}"></property> <property name="url" value="${jdbc.url.dev}"></property> <property name="username" value="${jdbc.user}"></property> <property name="password" value="${jdbc.password}"></property> </bean> <!-- 事务管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="datasource"></property> </bean> <!-- 事务配置1:需手动注解 --> <!-- proxy-traget-class true对类进行代理,如果是false表示对接口进行代理,使用时需要在类或者方法上加上 @Transactional 注解。 --> <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" />
application-common.xml (关键是让Spring管理排除Controller部分)
<!-- 会自动扫描com.mc.bsframe下的所有包,包括子包下除了@Controller的类。 --> <scpan:component-scan base-package="com.mc.bsframe"> <scpan:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" /> <scpan:exclude-filter type="annotation" expression="org.springframework.web.bind.annotation.ControllerAdvice" /> </scpan:component-scan>
spring-mvc.xml (关键是只处理Controller部分)
<!-- 只扫描base-package下的用Controller注解的类。 --> <context:component-scan base-package="com.mc.bsframe.controller"> <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" /> <!-- 必须要包括ControllerAdvice才能处理全局异常。 --> <context:include-filter type="annotation" expression="org.springframework.web.bind.annotation.ControllerAdvice" /> </context:component-scan>
基本关于事务的配置如上,但是我发现,偶尔会有失效的情况,
三、分析
为什么Junit4测试下有效,猜测因为Junit4下创建的是一个上下文对象,而实际项目是一个Spring上下文,一个SpringMVC上下文?四、解决方法
在spring-mvc.xml中添加排除扫描Service的配置,以前语句仅仅是包含了Controller和ControllerAdvice,如下:<!-- 只扫描base-package下的用Controller注解的类。 --> <context:component-scan base-package="com.mc.bsframe.controller"> <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" /> <!-- 必须要包括ControllerAdvice才能处理全局异常。 --> <context:include-filter type="annotation" expression="org.springframework.web.bind.annotation.ControllerAdvice" /> <!-- !!!最好加上这句让SpringMVC管理的时候排除Service层,避免事务失效的问题。 --> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service" /> </context:component-scan>
相关文章推荐
- spring+mybatis启动web项目报错:error create beans of ...Junit测试通过但是启动web项目报错
- 利用JUnit测试SpringMVC+MyBatis时出现的问题
- (转)如何在spring框架中解决多数据源的问题(写的挺好的,我在我多项目集成项目测试了,可以行的)
- maven 项目(三) spring集成mybatis事务配置(扫描注解)
- springmvc 整合mybatis dao层不写实现类,及MapperScannerConfigurer 引起的PropertyPlaceholderConfigurer无效问题解决方法
- java-mybatis、springmvc 整合,使用 @Transactional 时遇到的事务相关问题
- Android Studio该如何导入别人的开源库到自己的项目中并使用库中的控件,网上找过方法但是并不能搞定,希望实际问题 实际解决,拯救我这个傻瓜
- SpringMVC结合Mybatis事务失效的问题
- SpringMVC与Mybatis集合实现分页功能(实际项目)
- SpringMVC Mybatis的事务回滚问题
- 实际springMVC项目中自定义异常、spring事务与异常的简单应用
- SSM之整合mybatis与Junit测试中遇到的问题
- 基于spring和mybatis项目的JUnit测试用例的实现
- Maven搭建SpringMVC+Mybatis项目时遇到的问题记录
- eclipse 中使用MyBitis 创建项目时候 使用junit 测试出现找不到sqlmapconfig的问题
- 解决Eclipse项目中有sql-map-config.xml文件但是运行Junit测试ibatis时提示找不到该文件的一种方法
- Atitit.mybatis的测试 以及spring与mybatis在本项目中的集成配置说明
- Atitit.mybatis的测试 以及spring与mybatis在本项目中的集成配置说明
- 从零开始搭建maven+springmvc+mybatis web项目(3)---springmvc流程测试