我需要从一个应用程序连接到两个不同的数据库 . 问题是我的appEntityManager没有与之关联的事务管理器,我不知道该怎么做 . @Primary adminEntityManager能够使用spring boot提供的那个,没有任何问题,如here所述 .
上面的配置几乎可以单独使用 . 要完成图片,您还需要为两个EntityManagers配置TransactionManagers . 如果你把它标记为@Primary,其中一个可以被Spring Boot中的默认JpaTransactionManager选中 . 另一个必须明确地注入新实例 . 或者您可以使用跨越两者的JTA事务管理器 .
我已经注释了配置
@EnableTransactionManagement
这是相关的 beans 子
@Bean
@ConfigurationProperties(prefix = "datasource.app")
public DataSource appDataSource() {
return DataSourceBuilder.create().build();
}
@Bean
@Primary
@ConfigurationProperties(prefix = "datasource.admin")
public DataSource adminDataSource() {
return DataSourceBuilder.create().build();
}
@Bean
public LocalContainerEntityManagerFactoryBean appEntityManagerFactory(
final EntityManagerFactoryBuilder builder) {
return builder
.dataSource(appDataSource())
.packages("au.com.mycompany.app.bomcommon.domain")
.persistenceUnit("appPersistentUnit")
.build();
}
@Bean
@Primary
public LocalContainerEntityManagerFactoryBean adminEntityManagerFactory(
final EntityManagerFactoryBuilder builder) {
return builder
.dataSource(adminDataSource())
.packages("au.com.mycompany.app.bombatch")
.persistenceUnit("adminPersistentUnit")
.build();
}
//I thought this would do it but I am getting an exception
//No qualifying bean of type [org.springframework.transaction.PlatformTransactionManager] is defined: expected single matching bean but found 2: appTransactionManager,transactionManager
@Bean
public JpaTransactionManager appTransactionManager(@Qualifier("appEntityManagerFactory") final EntityManagerFactory emf) {
JpaTransactionManager transactionManager = new JpaTransactionManager();
transactionManager.setEntityManagerFactory(emf);
return transactionManager;
}
更新
我最后以不同的方式做到了这一点 . see here .
1 回答
看看这是否有效:
我对您的配置进行的唯一更改是明确声明管理端的事务管理器,并将该事务管理器标记为默认值 .