文档章节

Spring3MVC+Mybatis3.1框架下的事务

IT_小翼
 IT_小翼
发布于 2012/12/22 13:55
字数 554
阅读 1782
收藏 20

最近做一个项目,项目的框架采用是Spring3MVC+MyBatis3.1。可是在开发过程中发现配置的事务不管用。

出现这个问题的现象是用Junit调试事务管用,而部署到Tomcat中就不管用了。先看看事务的配置:

<!--proxy-target-class="true"强制使用cglib代理   如果为false则spring会自动选择-->
<aop:aspectj-autoproxy proxy-target-class="true"/>

<!-- Transaction manager for a single JDBC DataSource -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource" />
</bean>

<tx:advice id="txAdvice" transaction-manager="transactionManager">
    <tx:attributes>
        <tx:method name="save*" propagation="REQUIRED"/>
    </tx:attributes>
</tx:advice>


<aop:config>
<aop:pointcut expression="execution(public * com.luyou.platform.service.impl.*Impl.*(..))" id="pointcut"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="pointcut"/>
</aop:config>


采用以下两种方法调试:

一、Debug视图

 1、Junit下的

发现配置事务的AOP已经包进来了。再看看Tomcat中运行的Debug截图:

显然AOP没有被包进来。


二、Log4J的记录:

Junit下的记录:

Spring托管了事务。

Tomcat运行时的记录:

Spring没有托管事务。


从以上两种方法的调试说明了,事务的配置是正确的,只是在部署到Tomcat中,没有被托管。为什么会在Junit的时候就可以呢?得看看Junit的配置:

@RunWith(SpringJUnit4ClassRunner.class)
@TestExecutionListeners({DependencyInjectionTestExecutionListener.class})
@ContextConfiguration("classpath:applicationContext.xml")

这是Junit加载Spring容器的注解。ContextConfiguration会把applicationContext.xml的Bean都加载了,这就说明Tomcat在运行时没有将applicationContext.xml的Bean加载进来。问了前辈,前辈的回话是这样的:

切面配置在了root applicationContext的bean上了,而spring mvc会根据xxx-servelt.xml生成一个自己的applicationContext,他的父applicationContext为root applicatonContext,当mvc有自己的bean时便不再去向父context要bean,导致声明事务无效。

看了前辈的这个邮件,我将applicationContext.xml中配置事务的AOP复制到XXX-servlet.xml中。再调试,Tomcat中运行项目事务被Spring托管了,也就是问题解决了!!

问题解决后查看了Spring3.1的Docs发现了以下的内容:

These inherited beans can be overridden in the servlet-specific scope, and you can define new scope-specific beans local to a given Servlet instance.
Context hierarchy in Spring Web MVC Upon initialization of a DispatcherServlet, Spring MVC looks for a file named [servlet-name]-servlet.xml in the WEB-INF directory of your web application and creates the beans defined there, overriding the definitions of any beans defined with the same name in the global scope.

© 著作权归作者所有

IT_小翼

IT_小翼

粉丝 44
博文 153
码字总数 36364
作品 0
西安
程序员
私信 提问
加载中

评论(3)

xhong
xhong
tong
绝尘
绝尘
同上。
Lob
Lob
看看。留个名。备用。
Flex+Spring中jdbcTemplate与hibernate共享事务管理

HibernateTemplate一般是为了加快开发效率,还有就是使用Hibernate的时候,更简洁,更便利,而统一的声明事务,又让本来就已经很简洁的Hibernate对事务的处理,大大简化 但任何事务都有两面性,在带...

ulyn
2012/12/23
1K
0
LCN 分布式事务 - tx-lcn

LCN分布式事务 "LCN并不生产事务,LCN只是本地事务的搬运工" 框架介绍 LCN分布式事务框架是一款事务协调性的框架,框架本身并不创建事务,只是对本地事务做协调控制。因此该框架与其他第三方...

oswl
2017/09/22
2.9K
6
一站式解决分布式 SOA 事务问题 - EasyTransaction

一、由来 这个框架是结合齐牛金融公司之前遇到的分布式事务场景以及 支付宝程立分享的一个PPT<大规模SOA系统的分布式事务处理>而设计实现,意在解决之前公司对于每个分布式事务场景中都自行重...

skyesx
2017/03/29
4.7K
4
1991wangliang/tx-lcn

LCN分布式事务框架v4.0 "LCN并不生产事务,LCN只是本地事务的搬运工" 官方网址 www.txlcn.org 框架特点 支持各种基于spring的db框架 兼容SpringCloud、Dubbo、motan 使用简单,低依赖,代码完...

1991wangliang
2017/09/22
0
0
EasyTransaction全局柔性事务框架,一站式解决分布式事务问题

一、由来 这个框架是结合齐牛金融公司之前遇到的分布式事务场景以及 支付宝程立分享的一个PPT而设计实现。 本框架意在解决之前公司对于每个分布式事务场景中都自行重复设计中间状态、幂等实现...

skyesx
2017/03/29
2
0

没有更多内容

加载失败,请刷新页面

加载更多

字节序转换详解

在跨平台和网络编程中我们经常会提到网络字节序和主机字节序,如果没有正确对两者进行转换,从而导致两方产生了不同的解释,就会出现意想不到的bug。 目录 0x01 概念 0x02 分类 0x03 两种字节...

无心的梦呓
19分钟前
4
0
干货 | AI人脸识别之人脸搜索

本文档将利用京东云AI SDK来实践人脸识别中的人脸搜索功能,主要涉及到分组创建/删除、分组列表获取、人脸创建/删除、人脸搜索,本次实操的最终效果是:创建一个人脸库,拿一张图片在人脸库中...

京东云技术新知
24分钟前
4
0
【swiper】 滑块组件说明

本文转载于:专业的前端网站➣【swiper】 滑块组件说明 swiper 滑块视图容器,其原型如下: 1 <swiper 2 indicator-dots="[Boolean]" 3 indicator-color="[Color]" 4 indicator-act......

前端老手
34分钟前
4
0
堆排序算法

《Java算法总纲目录》 1、定义 由下图(网上找的),堆排序类似这种,把最大的数字放到最下面的最右面位置,然后把第二大的数字放到最下层的最右面倒数第二个位置,依此类推,如下: 2、代码...

木九天
37分钟前
5
0
框架和库的区别

框架和库的区别 框架:是一套完整的解决方案;对项目的侵入性较大,项目如果需要更换框架,则需要重新架构整个项目。 node 中的 express; 库(插件):提供某一个小功能,对项目的侵入性较小...

庭前云落
41分钟前
5
1

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部