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

本文记录了一次在SpringBoot+Mybatis环境下,遇到多数据源事务无法回滚的问题及解决过程。从mapper.xml的条件判断错误到@Transactional注解的常见问题排查,再到数据源和事务管理器的配置,最终发现是缺少多数据源事务管理的正确配置导致事务失效。通过调整配置,成功解决了事务不回滚的问题。
摘要由CSDN通过智能技术生成

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

问题背景: 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("sql
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Java抽奖系统后台使用Spring BootMyBatis和Redis队列可以有效地处理高并发情况。 首先,Spring Boot提供了一个轻量级的开发框架,可以简化Java后台开发的流程。它内置了Tomcat服务器,提供了自动配置和快速构建的功能,可快速搭建开发环境。此外,Spring Boot还具有良好的扩展性和灵活性,可以方便地集成其他框架和技术。 MyBatis是一款优秀的持久层框架,可以大幅简化数据库操作的代码。它提供了灵活的SQL映射配置,可以通过注解或XML编写SQL语句,同时也支持动态SQL。MyBatis还支持多种数据库连接池,能够提高数据库连接的效率和并发处理能力。 Redis是一款高性能的内存数据库,可作为缓存或消息队列使用。在抽奖系统中,可以将中奖结果存储在Redis中,以提高中奖查询的性能。此外,Redis还提供了发布-订阅(Publish-Subscribe)机制,可用于实现消息队列。当用户进行抽奖时,可以将请求放入Redis队列中,后台程序可以通过订阅该队列来处理请求,实现并发处理。 使用Redis队列处理高并发可以有效地降低系统的负载和响应时间。通过将请求放入队列中,可以使请求在后台异步处理,减少前端请求等待的时间。同时,通过控制队列的长度和处理速度,还可以防止系统负载过高。 综上所述,Java抽奖系统后台使用Spring BootMyBatis和Redis队列可以实现高并发的处理能力,提高抽奖系统的性能和可扩展性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值