Transactional注解失效

187 阅读1分钟

聊一聊Spring中@Transactional注解及其失效的七种场景

  • 作用在非public方法上,不报错但是会失效。

  • 添加transactional的类不是bean对象,例如没加@Service

  • propagation设置错误 例如设置成not_support,never

  • rollbackfor设置错误

  • 同一个类自调用,A方法没加注解,调用加了注解的B方法,失效

    解决方法:

    1. 将带有@Transactional注解的方法移到另一个类中,发起类之间的方法调用。(推荐)

    2. autowaired注入本类

    3. 使用 AopContext.currentProxy() 获取代理对象,但是需要配置exposeProxy=true,springboot启动类加上注解:@EnableAspectJAutoProxy(exposeProxy = true)

image.png

  • 异常被catch了,没抛出来

  • 数据库不支持事务 例如myisam