springmvc + mybatise 一个service 处理处理多个mapper 事物不回滚

当一个SpringMVC的Service中调用了两个不同Mapper进行更新操作,如果第二个Mapper抛出异常,第一个Mapper的更新仍会被提交。分析了两种解决方案:1. 将@Transactional的propagation设为NESTED并指定rollbackFor,但未生效;2. 调整SpringMVC的组件扫描,避免@Service被子容器覆盖,确保事务管理生效。通过调整后,异常发生时可以观察到事务回滚过程,问题得到解决。
摘要由CSDN通过智能技术生成


问题出现情况:

声明式事物@Transactional

在一个service调用了两个不同mapper 先后update两个数据,人为模拟后一个mapper异常,发现第一个mapper会提交数据。

网上有两种解决方法 第一个 方法 ,在@Transactional 调整事物传播方式从默认requared改为NESTED,并加入rollbackFor=Exception.class,修改后,无效。检查日志,发现当第一个mapper在执行完update时会按如下顺序执行:

DEBUG - Creating a new SqlSession
DEBUG - SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@d0d75] was not registered for synchronization because synchronization is not active
DEBUG - Fetching JDBC Connection from DataSource
DEBUG - JDBC Connection [jdbc:oracle:thin:@192.168.7.10:1521:VD, UserName=JOKER, Oracle JDBC driver] will not be managed by Spring
DEBUG - ooo Using Connection [jdbc:oracle:thin:@192.168.7.10:1521:VD, UserName=JOKER, Oracle JDBC driver]
DEBUG - ==>  Preparing: update ss_user s_user set s_user.certsn=?,s_user.de

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值