聊一聊Spring中@Transactional注解及其失效的七种场景
-
作用在非public方法上,不报错但是会失效。
-
添加transactional的类不是bean对象,例如没加@Service
-
propagation设置错误 例如设置成not_support,never
-
rollbackfor设置错误
-
同一个类自调用,A方法没加注解,调用加了注解的B方法,失效
解决方法:
-
将带有
@Transactional注解的方法移到另一个类中,发起类之间的方法调用。(推荐) -
autowaired注入本类
-
使用 AopContext.currentProxy() 获取代理对象,但是需要配置exposeProxy=true,springboot启动类加上注解:@EnableAspectJAutoProxy(exposeProxy = true)
-
-
异常被catch了,没抛出来
-
数据库不支持事务 例如myisam