SpringBoot 事务失效常见的原因

low一点的原因:

1. 非public方法

2. 异常被处理了(try catch)

3. bean没被Spring管理,比如没加Component注解

4. 数据库不支持(比如MyISAM)

 

高大上一点的原因:

5. 内部方法调用,可以注入本实例的代理类,通过代理类来调用

6. 抛出的是非RuntimeException,可以这么解决(@Transactional(rollbackFor = TimeoutException.class))

 

 

另外,事务方法内进行异步操作(开启线程执行代码)很可能会出问题,如果事务隔离级别、传播行为、提交时机设置不当,就很容易出问题,应该尽量避免。

 

另外,事务传播行为常用的一般就两种:

融入:当前线程已经有事务了,就加入,没有,则新建,连接信息和事务信息是存在ThreadLocal里面的

新建:挂起当前的事务(存在ThreadLocal),新建新的事务,等提交以后,再把老的事务信息拿出来

posted @ 2024-04-16 20:44  坏男银  阅读(374)  评论(0编辑  收藏  举报