2015-04-02 05:07:23 +00:00
|
|
|
|
### 67.7. 使用两个EntityManagers
|
|
|
|
|
|
|
|
|
|
即使默认的EntityManagerFactory工作的很好,你也需要定义一个新的EntityManagerFactory,因为一旦出现第二个该类型的bean,默认的将会被关闭。为了轻松的实现该操作,你可以使用Spring Boot提供的EntityManagerBuilder,或者如果你喜欢的话可以直接使用来自Spring ORM的LocalContainerEntityManagerFactoryBean。
|
|
|
|
|
|
|
|
|
|
示例:
|
|
|
|
|
```java
|
|
|
|
|
// add two data sources configured as above
|
|
|
|
|
|
|
|
|
|
@Bean
|
|
|
|
|
public LocalContainerEntityManagerFactoryBean customerEntityManagerFactory(
|
|
|
|
|
EntityManagerFactoryBuilder builder) {
|
|
|
|
|
return builder
|
|
|
|
|
.dataSource(customerDataSource())
|
|
|
|
|
.packages(Customer.class)
|
|
|
|
|
.persistenceUnit("customers")
|
|
|
|
|
.build();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Bean
|
|
|
|
|
public LocalContainerEntityManagerFactoryBean orderEntityManagerFactory(
|
|
|
|
|
EntityManagerFactoryBuilder builder) {
|
|
|
|
|
return builder
|
|
|
|
|
.dataSource(orderDataSource())
|
|
|
|
|
.packages(Order.class)
|
|
|
|
|
.persistenceUnit("orders")
|
|
|
|
|
.build();
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
上面的配置靠自己基本可以运行。想要完成作品你也需要为两个EntityManagers配置TransactionManagers。其中的一个会被Spring Boot默认的JpaTransactionManager获取,如果你将它标记为`@Primary`。另一个需要显式注入到一个新实例。或你可以使用一个JTA事物管理器生成它两个。
|