配置AspectJ后@Transactional同类调用仍不生效该如何排查?
遗漏配置排查清单
- 启动参数缺少aspectjweaver的javaagent配置
你当前只配置了spring-instrument的代理,AspectJ LTW模式必须同时添加aspectjweaver的代理参数,完整启动参数如下:-javaagent:C:\xx\xx\.m2\repository\org\aspectj\aspectjweaver\1.9.7\aspectjweaver-1.9.7.jar -javaagent:C:\xx\xx\.m2\repository\org\springframework\spring-instrument-5.3.12.jar - 检查@Transactional注解的使用规范
- 确认注解导入的是
org.springframework.transaction.annotation.Transactional,而非javax.transaction包下的同名注解 - 标注了
@Transactional的m2方法不能是private、protected或包访问权限,Spring事务默认仅识别public方法上的事务注解
- 确认注解导入的是
- 检查配置类生效状态
确认你的事务配置类被Spring扫描到,没有被排除在组件扫描范围外,也没有被条件注解(比如@ConditionalOnMissingBean等)过滤掉 - 验证LTW织入是否生效
启动时添加JVM参数-Daj.weaving.verbose=true,观察控制台是否输出你的业务类被AspectJ织入的日志,没有输出则说明织入流程本身没有执行,需要重新检查LoadTimeWeaving的相关配置 - 确认事务管理器配置正常
单数据源场景下Spring Boot会自动装配事务管理器,多数据源场景需要手动指定事务管理器,或者在@Transactional注解中通过transactionManager属性指定对应事务管理器的bean名称
内容的提问来源于stack exchange,提问作者Hayi
相关产品推荐
相关产品推荐

