Mybatis+SpringMVC+注解事务遇到的一些问题及解决
2015-12-07 14:37
711 查看
这两天要搭建一个小型购物网站的后台系统框架(Mybatis+SpringMVC+mysql),我使用的是注解事务,遇到了一些问题:
1.事务不起作用;
2.在业务逻辑层使用注解事务时出错;
查看Spring官方文档和上网找了一些资料,解决了问题,我总结了一下,要注意一下的地方:
第一个问题:事务不起作用
我使用的是SpringMVC,所以最主要的问题,在SpringConfig.xml和SpringMVC.xml这两个文件中!我们把service的扫描放到SpringConfig.xml中,把controller的扫描放到SpringMVC.xml中!
SpringConfig.xml配置文件<!-- 扫描业务组件,除了@Controller -->
<context:component-scan base-package="com.shopweb">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" />
</context:component-scan>
SpringMVC.xml配置文件
<!-- 只用来扫描controller ,use-default-filters设置成false才能让注解事务起作用-->
<context:component-scan base-package="com.shopweb.web.controller" use-default-filters="false">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" />
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service" />
</context:component-scan>
第二个问题:在业务逻辑层使用注解事务时出错
首先看我的配置文件
<!-- 启动spring注解 -->
<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="false" />
我想明白的人,一定会看到其中的关键就是proxy-target-class="false"这个属性
下面来解释一下这个属性:
proxy-target-class属性值决定是基于接口的还是基于类的代理被创建。如果proxy-target-class 属性值被设置为true,那么基于类的代理将起作用(这时需要cglib库)。如果proxy-target-class属值被设置为false或者这个属性被省略,那么标准的JDK 基于接口的代理将起作用。一句直白的话,就是true是需要在类中使用事务,false或者不设置就是在接口中使用事务这个问题要感谢这篇帖子,大家可以去看看原版帖子!
大家如果遇到这些问题,对照着修改一下就基本能解决问题
相关文章推荐
- 剖析Java中阻塞队列的实现原理及应用场景
- myeclipse项目文件结构浏览模式配置
- java中多种排序算法总结
- eclipse如何去掉无用的validation、优化eclipse
- spring quartz 时间配置格式
- 深入理解Java线程编程中的阻塞队列容器
- java ++i 和 i++
- java ++i 和 i++
- springmvc事务@Transactional到底能不能用在controller上。答案是可以的
- Java实现将GBK编码格式的文件夹中所有文件都转化为UTF-8格式的文件,编码格式转化
- java泛型程序设计——类型变量限定 + 泛型代码和虚拟机
- Java 学习历程(二)面向对象编程
- java 基础(异常练习)
- java多线程--线程中断
- Windows+JDK6环境配置
- Eclipse编辑jsp、js文件时出现卡死解决方案~
- Spring+Springmvc+MyBatis整合
- Dubbo与Zookeeper、SpringMVC整合和使用
- 常用加密算法的Java实现(一) ——单向加密算法MD5和SHA
- 实现apk 调用framework java JNI中方法