Spring 引导中的事务配置后 AspectJ 不工作
AspectJ not working after Transaction configuration in Spring Boot
首先,我遇到了交易不工作的问题,所以我将配置从 @EnableTransactionManagement
更新为 @EnableTransactionManagement(proxyTargetClass=true)
,但更新后这个错误在启动时抛出。
在评论了与 AspectJ 相关的所有代码后,错误消失了,事务工作正常,但我缺少我的 AspectJ 函数。
我尝试用 @EnableTransactionManagement(mode=AdviceMode.PROXY)
和 @EnableTransactionManagement @EnableLoadTimeWeaving
替换 @EnableTransactionManagement(proxyTargetClass=true)
,其中 none 让我使用 AspectJ,使用调试器我可以看到建议根本没有执行。
AppConfig.java
@EnableAutoConfiguration
@ComponentScan(basePackages = { "com.geopro" })
@EnableJpaRepositories(basePackages = { "com.geopro.repositories" })
@EntityScan(basePackages = { "com.geopro.entities" })
@EnableTransactionManagement(proxyTargetClass=true)//(mode=AdviceMode.ASPECTJ)//
public class AppConfig {
@Bean
public HibernateJpaSessionFactoryBean sessionFactory(EntityManagerFactory emf) {
HibernateJpaSessionFactoryBean factory = new HibernateJpaSessionFactoryBean();
factory.setEntityManagerFactory(emf);
return factory;
}
}
这个故事的寓意是永远不要在同一个 class 中混合使用事务和 AspectJ 函数,我了解到事务在其内部 AOP 中使用的困难方法,它的 AOP 不能很好地与用户 AOP 配合使用。
首先,我遇到了交易不工作的问题,所以我将配置从 @EnableTransactionManagement
更新为 @EnableTransactionManagement(proxyTargetClass=true)
,但更新后这个错误在启动时抛出。
在评论了与 AspectJ 相关的所有代码后,错误消失了,事务工作正常,但我缺少我的 AspectJ 函数。
我尝试用 @EnableTransactionManagement(mode=AdviceMode.PROXY)
和 @EnableTransactionManagement @EnableLoadTimeWeaving
替换 @EnableTransactionManagement(proxyTargetClass=true)
,其中 none 让我使用 AspectJ,使用调试器我可以看到建议根本没有执行。
AppConfig.java
@EnableAutoConfiguration
@ComponentScan(basePackages = { "com.geopro" })
@EnableJpaRepositories(basePackages = { "com.geopro.repositories" })
@EntityScan(basePackages = { "com.geopro.entities" })
@EnableTransactionManagement(proxyTargetClass=true)//(mode=AdviceMode.ASPECTJ)//
public class AppConfig {
@Bean
public HibernateJpaSessionFactoryBean sessionFactory(EntityManagerFactory emf) {
HibernateJpaSessionFactoryBean factory = new HibernateJpaSessionFactoryBean();
factory.setEntityManagerFactory(emf);
return factory;
}
}
这个故事的寓意是永远不要在同一个 class 中混合使用事务和 AspectJ 函数,我了解到事务在其内部 AOP 中使用的困难方法,它的 AOP 不能很好地与用户 AOP 配合使用。