spring - Spring JPA 中的多个事务管理器
问题描述
我想使用两个事务管理器如下
<bean id="transactionManagerReadOnly" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactoryReadOnly" />
</bean>
<bean id="transactionManagerReadWrite" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactoryReadWrite" />
</bean>
在我的代码中有 tx:annotation-driven 标签,如下所示
<tx:annotation-driven mode="aspectj" transaction-manager="transactionManagerReadWrite"/>
<tx:annotation-driven mode="aspectj" transaction-manager="transactionManagerReadOnly"/>
但我在某处读到应该只有一个 tx:annotation-driven 存在,并通过在 @Transaction 标记中指定来引用另一个事务管理器,例如 folows
@Transactional("transactionManagerReadWrite")
@Transactional("transactionManagerReadOnly")
以下是我的问题和疑问
- 如果我们没有在注释中明确指定事务管理器的名称,
@Transactional
那么如果存在两个事务管理器并且配置文件中存在两个标签,则哪个事务管理器被认为是有效的候选者?tx:annotation-driven
@Transactional
- 如果建议
tx:annotation-driven
在应用程序中只有一个标签,而我们tx:annotation-driven
只在标签中指定模式,那么第二个事务管理器的模式是什么?即弹簧默认模式是代理模式,我想使用两个事务管理器的aspectj模式 aspectj
如果我们只能使用一个tx:annotation-driven
标签并且默认模式是proxy
spring 模式,如何为第二个事务管理器指定模式?
解决方案
您只能有一个<tx:annotation-driven />
配置@Transactional
注释的处理方式。您指定要与注释关联的模式(proxy
或)和默认事务管理器。aspectj
@Transactional
因此,方面要么通过代理(模式proxy
)应用,要么通过加载或编译时编织(模式aspectj
)应用。只有一个方面,该方面要么使用默认事务管理器,要么使用@Transactional
注释中定义的事务管理器。
给定您指定aspectj
模式并transactionManagerReadWrite
作为默认事务管理器
<tx:annotation-driven mode="aspectj" transaction-manager="transactionManagerReadWrite"/>
现在,当使用普通@Transactional
时,它将使用transactionManagerReadWrite
,使用@Transactional("transactionManagerReadOnly")
时将使用transactionManagerReadOnly
. 任何一个都将被编织,用作aspectj
应用交易的模式。
推荐阅读
- .net - 无法读取未定义 Angular 9 的属性“类型”
- excel - 不使用 HTML 代码在电子邮件中发送嵌入图像
- mysql - 合并找到重复项的行
- node.js - 如何使用 Nodejs 和 Mongoose 将请求正文数组发布到 MongoDb
- dictionary - 给定 Kotlin 中的键列表对地图进行切片
- docker - 如何将 .env 文件传递给 Go 项目中的 docker 映像?
- flutter - 在flutter中打开url并提交数据到应用程序
- javascript - Mongoose 是如何知道我在调用它们的函数时使用了 await 的?[已编辑]
- sql - SQL:如何使用 WHERE 而不是 OUTER JOIN
- google-analytics - 如何使用参数过滤 Data Studio 中的 Analytics 数据?