@EnableTransactionManagement的范围是什么?

我试图了解在@EnableTransactionManagement多个JavaConfig上下文中放置注释的正确位置在哪里?

考虑以下情形:我在JPAConfig.java和AppConfig.java中具有服务bean集的JPA配置。然后,在RootConfig.java中编写整个应用程序配置。

我在JPAConfig.java中定义事务管理器,并启用对JPA存储库的扫描-

当这些暴露事务行为时,我将其放到@EnableTransactionManagementJPAConfig上,并且它可以工作。

但是,某些服务Bean还需要具有事务处理方法,例如访问单个事务中的多个存储库。我是否也应该@EnableTransactionManagement覆盖AppConfig?在我看来,研究这种注释的实现似乎会导致重新定义某些bean。实际上,这样做似乎对我不起作用。

@Configuration

@EnableTransactionManagement

@EnableJpaRepositories("com.mypackage.repositories")

public class JPAConfig {

// ... here are EntityManager and PlatformTransactionManager beans

}

@Configuration

@ComponentScan("com.mypackage.services")

// @EnableTransactionManagement // - ???

public class AppConfig {

}

@Configuration

@Import({AppConfig.class, JPAConfig.class})

public class RootConfig {

}

感谢任何建议。

回答:

经过一些实验,我似乎自己找到了答案:

  • @EnableTransactionManagement尽管在注册internalTransactionAdvisor 实际处理@Transactional创建的bean上的注释的注册时发现该注释有多早,但这并不需要对每个上下文配置进行配置。
  • 就我而言,我改变了上下文的顺序@Import声明,使PersistenceConfig持有@EnableTransactionManagement是第一。此后其他bean可以使用AOP声明式事务。
  • 另一个警告与同时使用@EnableTransactionManagement和有关@EnableGlobalMethodSecurity。全局方法安全性使用bean后处理,这似乎需要连接整个安全性配置。BeanPostProcessors是在上下文启动时就创建的,因此您不能@Transactional在引导Spring安全性所需的任何bean中使用声明式(在我的情况下UserDetailsContextMapper)-那时还没有创建Advisor!

以上是 @EnableTransactionManagement的范围是什么? 的全部内容, 来源链接: utcz.com/qa/406980.html

回到顶部