工作中Springboot@Transaction事务注解失效问题

工作中Springboot@Transaction事务注解失效问题

  • 问题
    • 解决方法

问题

在分享我工作中遇到的事务问题之前,先简单给大家分享一下Springboot事务失效的几种常见原因

1、检查数据库的引擎是否是innoDB

2、启动类上是否加入@EnableTransactionManagement注解(这个并不是必须的,springboot默认开启)

3、是否在方法上加入@Transactional注解或Service的类上是否有@Transactional注解

4、方法是否为public修饰的

5、是否是因为抛出了Exception等Checked检查异常,默认情况下,spring会对unchecked异常进行事务回滚;如果是checked异常则不回滚。如果想回滚Excepton异常可以在注解上添加@Transactional(rollbackFor = Exception.class)这样添加就可以了

6、在一个类中的方法调用时,被调用的方法如果有事务管理,那么事务管理会失效。

7、是否添加了@Async异步注解

8、事务方法的类是否被代理,可用AopUtils.isAopProxy()查看

我的错误是在Spirngboot中整合shiro的时候在Realm自动装配了Service层导致事务的Service没有被代理,所以引起了事务失效。

解决方法

在Realm中自动装配的Service加上 @Lazy便可以解决了

你可能感兴趣的:(工作中Springboot@Transaction事务注解失效问题)