springboot事务不回滚不生效

本文探讨了事务在代码中的有效使用,包括trycatch异常处理的影响、服务间调用的事务传播,以及数据库引擎(如InnoDB)对于事务支持的重要性。文章详细介绍了如何在Linux环境下配置my.cnf文件,将数据库引擎从MyISAM更改为InnoDB,并提供了修改现有数据库引擎的具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

排查思路:

1:查看代码中是否有  try catch 捕获的异常,如果有事务是不生效的

2:同一类内方法调用,无论被调用的b()方法是否配置了事务,此事务在被调用时都将不生效。取决于调用方是否开启事务

3:查看数据库是否为 InnDB   

show engines

 

  我在阿里云服务器上装的数据库默认为 MyISAM ,这样事务是不生效的。需要改为 InnoDB

在Linux下叫my.cnf,该文件位于/etc/my.cnf  ,文件中 [mysqld] 下面加入

default-storage-engine=INNODB

 :wq  保存后,重启mysql  

service mysqld restart

再次查看数据库引擎默认就为 InnDB啦 

 但是已经创建的数据库可是不会进行修改的,下方sql 生成查询命令  ,代码中数据库名改为自己的

SELECT CONCAT( 'ALTER TABLE ', TABLE_NAME, ' ENGINE=InnoDB;' )
FROM information_schema.tables
WHERE table_schema = '数据库名'
LIMIT 0 , 10000;

copy 出数据一条一条的执行,修改成功

3:还有一种情况是 service 调用其他service . 在首service 没加入

@Transactional(propagation = Propagation.REQUIRED)

而第二个service 加入事务注解,第一个没加入事务不会回滚

 

如有错误,恳请指正  author:邱健 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值