记一次springboot+mybatis事务无效的处理

代码虐我千百遍,我待代码如初恋

问题背景: springboot + mybatis, 多数据源, 事务无法回滚

网上查阅了各种博客
第一种说法(个人觉得这个真的非常规):
mapper.xml文件中 条件判断错误,类似这种

<if test="record.nmpa_id != null">nmpa_id,</if>

说是字段不存在,查之,非问题所在

其他说法:
常规@Transactional的相关错误,这一块的各种博客非常多,解释的也很详细,总结一下大致以下,不清楚的可以自行搜索.
1.方法必须是public
2.内部调用的问题
3.异常要抛出来,不要try catch 处理掉了
4.抛出的异常不支持回滚,unchecked什么的

然后就是各种我查询的配置的相关问题
1.启动类要加@EnableTransactionManagement
2.application.yml 要加

spring:
	transaction:
        rollback-on-commit-failure: true

3.要配置sqlsessionfactory
4.要配置transactionManage

问题的初始是,根本就没有事务,就算加了@transaction标签,也没有事务,

于是有人说不同的数据源要配不同的transactionManager,于是有了如下错误配置

//@Bean(name = TransManageType.SQLSERVER)
	//@Primary
	public DataSourceTransactionManager mssqlTransactionManager(@Qualifier("sqlserverDataSource") DataSource sqlserverDataSource)
	{
		return new DataSourceTransactionManager(sqlserverDataSource);
	}
	

	//@Bean(name = "mssqlErpTransactionManager")
	public DataSourceTransactionManager mssqlErpTransactionManager(@Qualifier("sqlserverErpDataSource") DataSource sqlserverErpDataSource)
	{
		return new DataSourceTransactionManager(sqlserverErpDataSource);
	}

这里确实是配了不同的数据源,也是这里配置了之后,出现了明明已经加入了事务,为什么就不回滚的问题springboot+mybatis不能回滚

最终问题解决(正确配置):

	@Bean
	public PlatformTransactionManager transactionManager(@Qualifier("dynamicDataSource") DataSource dynamicDataSource)
	{
		return new DataSourceTransactionManager(dynamicDataSource);
	}

没有配多事务管理,也可能是这个加入了动态了数据源后,spring自动根据数据源切换,进行事务的切换吧,具体源码没有深究,不过最终问题解决了.

springboot的sqlsessionFactory配置,其实在application.yml文件中就能配置了,也就是下面这一段

# MyBatis
mybatis:
    # 搜索指定包别名
    typeAliasesPackage: com.xxx
    # 配置mapper的扫描,找到所有的mapper.xml映射文件
    mapperLocations: classpath*:mapper/**/*Mapper.xml
    # 加载全局的配置文件
    configLocation: classpath:mybatis/mybatis-config.xml
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值