spring+mybatis声明式事务@Transaction无效抛出异常不回滚

测试代码如下:

抛出异常不回滚,百度无果,只好下载源码调试,开始对spring源码并不清楚,调试的时候也是晕头转向,经过两天的摸索算是有些初步了解. doGetResource每次都为null(见下图),因为null所以每次都会重新从连接池获取链接, 每次从连接池获取链接就不能保证两次获取的链接是同一个,不是同一个链接就不会支持事务回滚. 突破口就是resources.get()获取的map为什么为null, resource在什么地方赋值的. 在bingResource(object key, object value)函数赋值,就在这个函数上打断点,一直这个函数没有被调用, 又陷入死胡同.

接着回忆一下在spring框架使用中踩过的坑,有一次我把Controller的been配置在了spring-common.xml文件中报404错误,是因为spring的been不能处理spring mvc的事件请求. 于是检查spring-common.xml和spring-mvc.xml,原来我把所有的been全部配置在了spring mvc的配置文件. 是否spring mvc的been不具备事务能力呢? 验证,于是把Controller的been放在spring-mvc.xml文件,其他been全部放在spring-common.xml文件,调试运行进入了TransactionSynchronizationManager.bindResource(Object key, Object value)内的断点, 预感也可了, 一路F8终于回滚了.

得出结论spring mvc实例化的@Service是不具备事务处理能力的.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值