spring - @Transactional 具有多个事务管理器和多个数据库
问题描述
我为 SpringBoot 应用程序设置了以下内容:
- 数据库 1 - 事务管理器数据库 1
数据库 2 - 事务管理器数据库 2
Transactional(value = "TransactionManagerDatabase1", readOnly = true) public void getResults() { // select a row from table in Database1 // select a row from table in Database2 DataSource dataSourceDB2 = SpringContextProvider.getApplicationContext().getBean("TransactionManagerDatabase2", DataSource.class); dataSourceDB2.getPool().getActive(); //This is returning an active connection with Database2 }
@Transactional
申请Database1时, Database2怎么还能保持活动连接?
解决方案
据此:使用 Spring & Hibernate 对多个数据库进行事务管理
您可以像这样指定多个 TM:
<bean>
<bean id="transactionManager1"
class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory1" />
<qualifier value="account"/>
</bean>
<bean id="transactionManager2"
class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory2" />
<qualifier value="businessData"/>
</bean>
然后您可以执行此操作来指定您需要的 TM:
public class TransactionalService {
@Transactional("account")
public void setSomethingInAccount() { ... }
@Transactional("businessData")
public void doSomethingInBusinessData() { ... }
}
public class TransactionalService { @Transactional("businessData") public void doSomethingInBusinessData( @Transactional ("account") -> {...}) {...} }
推荐阅读
- javascript - Javascript 在请求中不包括表单数据
- android - sqlite 按包含带逗号分隔符的数字的字符串排序
- php - 带有外部应用程序的 Symfony PdoSessionHandler
- python - 在 Python 中查找字典值的最小值
- intellij-idea - 是否可以创建 IntelliJ(不是正在开发的程序)本机的常量以在“评估表达式”对话框中使用?
- c# - 如何以编程方式确定 Click-Once 应用程序的 exe 位置
- javascript - 使用打字稿中的动态值进行过滤
- javascript - 如何向我的定制 Javascript 界面添加可选属性?
- python - 使用 Python 和 BeautifulSoup 从页面获取表格信息
- python - 如何在没有单热编码的情况下使用 keras 中的“sparse_categorical_entropy”进行多类分类?