low一点的原因:
1. 非public方法
2. 异常被处理了(try catch)
3. bean没被Spring管理,比如没加Component注解
4. 数据库不支持(比如MyISAM)
高大上一点的原因:
5. 内部方法调用,可以注入本实例的代理类,通过代理类来调用
6. 抛出的是非RuntimeException,可以这么解决(@Transactional(rollbackFor = TimeoutException.class))
另外,事务方法内进行异步操作(开启线程执行代码)很可能会出问题,如果事务隔离级别、传播行为、提交时机设置不当,就很容易出问题,应该尽量避免。
另外,事务传播行为常用的一般就两种:
融入:当前线程已经有事务了,就加入,没有,则新建,连接信息和事务信息是存在ThreadLocal里面的
新建:挂起当前的事务(存在ThreadLocal),新建新的事务,等提交以后,再把老的事务信息拿出来
标签:事务,SpringBoot,新建,ThreadLocal,线程,失效,原因 From: https://www.cnblogs.com/huainanyin/p/18094585