问题
在分享我工作中遇到的事务问题之前,先简单给大家分享一下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便可以解决了