当前位置: 首页 > 面试题库 >

@EnableTransactionManagement的范围是什么?

令狐宣
2023-03-14
问题内容

我试图了解在@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!


 类似资料:
  • 我刚开始编码。我想对同一个变量使用两次switch语句,我被告知要这样做,变量必须是'inscope'。 作为一个初学者,我不知道那是什么意思。那么在范围内意味着什么呢?而且,如果一个变量不在作用域中,我如何使它在作用域中?

  • 问题内容: 什么是词汇作用域简介? 问题答案: 我通过示例了解它们。:) 首先,采用类似C的语法的 词汇作用域 (也称为 静态作用域 ): 每个内部级别都可以访问其外部级别。Lisp的第一个实现使用另一种称为动态范围的方式,再次使用类似C的语法: 在这里既可以访问的或,或在调用任何函数与在其声明。 将打印5 将打印10。 第一个称为静态,因为它可以在编译时推导,第二个称为动态,因为外部范围是动态的

  • 问题内容: javascript中变量的范围是什么?它们在函数内部和外部的作用域是否相同?还是有关系吗?另外,如果变量是全局定义的,则将变量存储在哪里? 问题答案: TLDR JavaScript具有词汇(也称为静态)作用域和闭包。这意味着您可以通过查看源代码来确定标识符的范围。 四个范围是: 全球-一切可见 功能-在功能(及其子功能和块)中可见 块-在块(及其子块)中可见 模块-在模块内可见 在

  • 如果我有一个Web应用程序,它的应用程序上下文加载了我的webapp和所有作业配置文件的所有内容,如果我的作业中有一个没有范围="步骤"的简单ItemReader,那么阅读器是单例的,对吗?所以如果我通过SimpleJobLauncher从控制器启动两次作业,我会使用同一个bean,对吗?除非我放入范围="步骤",以便每个作业执行一个bean? 另一方面,如果我从CommandLineJobRun

  • 问题内容: 我知道范围有3种类型:范围,步幅和间隔。 快速间隔是多少?以及它们使用的一个例子是什么? http://zh.wikipedia.org/wiki/间隔(数学) 编辑:这就是beta 5 xcode 6发行说明所说的: •可比较值的间隔,可以有效地检查是否包含。间隔用于switch语句中的模式匹配,并由〜=运算符使用。 问题答案: 从Swift 3(使用Xcode 8)开始,类型不再存

  • 我正在尝试使用HikariCP来共享我的数据库连接。快速阅读他们的文档,我不确定是否应该将我的HikariDataSource对象保留在内存中,并始终向完全相同的对象请求新连接,或者每次创建新连接时是否可以实例化一个新的HikariDataSource对象?