springboot事务不回滚不生效
排查思路:
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:邱健
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】凌霞软件回馈社区,携手博客园推出1Panel与Halo联合会员
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步