事务注解在springMVC下需要特殊处理
2015-02-05 16:55
344 查看
前言:今天在测试web管理端项目时,非常尴尬的是方法虽然用了事务注解,然而执行出错的情况下却没有进行事务回滚,也就是说@Transactional在springMVC的场景下失效了,通过调查和试验得出DispatcherServlet的context-dispatcher.xml和ContextLoaderListener的applicationContext.xml在进行context:component-scan标签设定时,需要互不影响。
最开始的时候,我在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 {
该方法内出现错误的时候,事务压根没有起到作用,修改以上两个文件到以下这样的效果
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
可以看得出来:
有@Transactional注解的类需要通过父容器(applicationContext.xml)进行加载,而我原来的做法时,同时加载后,父容器和子容器发生冲突了,导致事务失效。
相关文章推荐
- MyGeneration学习笔记(8) :dOOdad提供的数据绑定、特殊函数和事务处理
- 需要做特殊处理的DOM元素属性的访问
- Spring 注解学习手札(五) 业务层事务处理
- Spring学习5-Spring整合JDBC及其事务处理(注解方式)
- 引用SpringMVC时,事务,AOP等注解无效的解决办法
- MyGeneration学习笔记(8) :dOOdad提供的数据绑定、特殊函数和事务处理
- 使用SpringMVC注解@RequestParam(value="XXX",required=false)时需要注意的问题
- NSMutableAttributedString 处理字符串里需要有特殊颜色或者大小
- json工具处理对象属性时,该属性需要特殊处理时,例如时间本来是yyyy/MM/dd你想转换为yyyy-MM-dd
- MyGeneration学习笔记(8) :dOOdad提供的数据绑定、特殊函数和事务处理
- 使用SpringMVC注解@RequestParam(value="XXX",required=false)时需要注意的问题
- 使用SpringMVC注解@RequestParam(value="XXX",required=false)时需要注意的问题
- js--jquery--超链接<a>标识用作按钮需要做特殊处理
- 基于IE内核的WebBrowser控件,键盘消息需要特殊处理的问题
- springMVC 注解事务配置
- spring声明式事务处理-注解
- php正则对\\\\转义的特殊处理需要注意
- Spring中注解: @Transactional 事务处理
- 使用SpringMVC注解@RequestParam(value="XXX",required=false)时需要注意的问题
- Spring中注解: @Transactional 事务处理