在 Spring 引导中获取 EntityManager 的句柄
Obtaining handle to EntityManager in Spring Boot
有什么方法可以获取给定实体对象的 EntityManager 句柄吗?我将 spring boot 1.2.3 与 JPA starter 一起使用,并且我正在使用 @configuration
进一步显式配置多个数据源
我已经检查了 [resolved]SPRING BOOT access to entityManager,它似乎没有回答问题。
谢谢。
编辑:我添加了关于如何定义我的数据源的描述:
@Component
@Configuration
public class DataSources {
@Bean
@Primary
@ConfigurationProperties(prefix="first.datasource")
public DataSource getPrimaryDataSource() {
return DataSourceBuilder.create().build();
}
@Bean
@ConfigurationProperties(prefix="second.datasource")
public DataSource getSecondDataSource() {
return DataSourceBuilder.create().build();
}
@Bean
@ConfigurationProperties(prefix="third.final.datasource")
public DataSource getThirdFinalDataSource() {
return DataSourceBuilder.create().build();
}
}
在我的 application.yml 我有以下部分
first.datasource:
name: 'first_datasource',
#other attributes...
second.datasource:
name: 'second_datasource',
#other attributes...
third.final.datasource:
name: 'first_datasource',
#other attributes...
到目前为止,我已经尝试了@Stephane 的两个建议,但我得到了 NoSuchBeanDefinitionException
假设我的实体名为 Customer
然后我尝试了
@Service
public class FooService {
private final EntityManager entityManager;
@Autowired
public FooService(@Qualifier("customerEntityManager") EntityManager entityManager) {
...
}
}
不过我也试过了
@PersistenceContext(unitName = "customer") // also tried "customers" and "first_datasource"
private EntityManager entityManager;
运气不好。
这取决于您是如何配置它的,但是您是否尝试过 注入 EntityManager
带有与创建它的工厂相对应的限定符?
这里是a sample project with two data sources。如果你想为订单注入EntityManager
,只需在项目
的任何Spring bean中执行以下操作
@Service
public class FooService {
private final EntityManager entityManager;
@Autowired
public FooService(@Qualifier("orderEntityManager") EntityManager entityManager) {
...
}
}
对于客户,请使用 customerEntityManager
。
当然也可以用持久化单元名代替,即
@PersistenceContext(unitName = "customers")
private EntityManager entityManager;
@PersistenceContext(unitName = "orders")
private EntityManager entityManager;
查看项目的配置以获取更多详细信息。
有什么方法可以获取给定实体对象的 EntityManager 句柄吗?我将 spring boot 1.2.3 与 JPA starter 一起使用,并且我正在使用 @configuration
我已经检查了 [resolved]SPRING BOOT access to entityManager,它似乎没有回答问题。
谢谢。
编辑:我添加了关于如何定义我的数据源的描述:
@Component
@Configuration
public class DataSources {
@Bean
@Primary
@ConfigurationProperties(prefix="first.datasource")
public DataSource getPrimaryDataSource() {
return DataSourceBuilder.create().build();
}
@Bean
@ConfigurationProperties(prefix="second.datasource")
public DataSource getSecondDataSource() {
return DataSourceBuilder.create().build();
}
@Bean
@ConfigurationProperties(prefix="third.final.datasource")
public DataSource getThirdFinalDataSource() {
return DataSourceBuilder.create().build();
}
}
在我的 application.yml 我有以下部分
first.datasource:
name: 'first_datasource',
#other attributes...
second.datasource:
name: 'second_datasource',
#other attributes...
third.final.datasource:
name: 'first_datasource',
#other attributes...
到目前为止,我已经尝试了@Stephane 的两个建议,但我得到了 NoSuchBeanDefinitionException
假设我的实体名为 Customer
然后我尝试了
@Service
public class FooService {
private final EntityManager entityManager;
@Autowired
public FooService(@Qualifier("customerEntityManager") EntityManager entityManager) {
...
}
}
不过我也试过了
@PersistenceContext(unitName = "customer") // also tried "customers" and "first_datasource"
private EntityManager entityManager;
运气不好。
这取决于您是如何配置它的,但是您是否尝试过 注入 EntityManager
带有与创建它的工厂相对应的限定符?
这里是a sample project with two data sources。如果你想为订单注入EntityManager
,只需在项目
@Service
public class FooService {
private final EntityManager entityManager;
@Autowired
public FooService(@Qualifier("orderEntityManager") EntityManager entityManager) {
...
}
}
对于客户,请使用 customerEntityManager
。
当然也可以用持久化单元名代替,即
@PersistenceContext(unitName = "customers")
private EntityManager entityManager;
@PersistenceContext(unitName = "orders")
private EntityManager entityManager;
查看项目的配置以获取更多详细信息。