码迷,mamicode.com
首页 > 编程语言 > 详细

springMVC事务注解失效

时间:2015-02-05 18:30:42      阅读:289      评论:0      收藏:0      [点我收藏+]

标签:springmvc   事务   失效   

前言:今天在测试web管理端项目时,非常尴尬的是方法是用了事务注解,然而执行出错的情况下却没有进行事务回滚,也就是所说的@Transactional在springMVC的场景下失效了,而我明明在spring的项目中应用@Transactional是有效果的,相当郁闷,尝试了各种办法终究无效,最后看到http://icanfly.iteye.com/blog/778401,找到了解决方法,非常感谢,另外我想结合我自己遇到的问题进行一些说明。

最开始的时候,我在DispatcherServlet的context-dispatcher.xml配置以下内容

<context:component-scan base-package="com.honzh.spring"/>
在ContextLoaderListener的applicationContext.xml配置以下内容
<context:component-scan base-package="com.honzh.spring"/>
在这样的情况下,假如存在以下方法
@Transactional
	public void saveMember(Members members, HttpServletRequest request) throws Exception {
该方法内出现错误的时候,事务压根没有起到作用,按照icanfly所说的,我修改以上两个文件到以下这样的效果

context-dispatcher.xml:

	<context:component-scan base-package="com.honzh.spring">
		<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" /> 
  		<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service" /> 
	</context:component-scan>
applicationContext.xml:
	<context:component-scan base-package="com.honzh.spring">
		<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" /> 
	</context:component-scan>
然后再测试saveMember方法,出错的情况下事务回滚了,可以看到事务回滚的日志了
Transaction synchronization rolling back SqlSession 
DEBUG 2015-02-05 17:30:11,074 org.springframework.jdbc.datasource.DataSourceTransactionManager: Releasing JDBC Connection 
DEBUG 2015-02-05 17:30:11,074 org.springframework.jdbc.datasource.DataSourceUtils: Returning JDBC Connection to DataSource
ERROR 2015-02-05 17:30:11,075 com.honzh.spring.controller.MemberController: 
java.lang.NullPointerException
icanfly作者的分析中可以看得出来:

有@Transactional注解的类需要通过父容器(applicationContext.xml)进行加载,而我原来的做法时,同时加载后,父容器和子容器发生冲突了,导致事务失效。







springMVC事务注解失效

标签:springmvc   事务   失效   

原文地址:http://blog.csdn.net/qing_gee/article/details/43530213

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!