Java 如何从辅助数据源注入Crudepository和EntityManager?
我想在我的应用程序中初始化两个Java 如何从辅助数据源注入Crudepository和EntityManager?,java,spring,spring-data-jpa,Java,Spring,Spring Data Jpa,我想在我的应用程序中初始化两个数据源,如下所示: @Configuration public class DataSourceConfig { @Bean @Primary @ConfigurationProperties(prefix="spring.datasource") public DataSource primaryDataSource() { return DataSourceBuilder.create().build();
数据源
,如下所示:
@Configuration
public class DataSourceConfig {
@Bean
@Primary
@ConfigurationProperties(prefix="spring.datasource")
public DataSource primaryDataSource() {
return DataSourceBuilder.create().build();
}
@Bean
@ConfigurationProperties(prefix="spring.datasource2")
public DataSource secondaryDataSource() {
return DataSourceBuilder.create().build();
}
}
public class SecondaryDbService {
@Autowired
private EntityManager em;
@Autowired
private SecondaryCrudRepository dao;
}
interface SecondaryCrudRepository implements CrudRepository<SecondaryEntity, Long> {
}
现在,我想按如下方式使用辅助数据源:
@Configuration
public class DataSourceConfig {
@Bean
@Primary
@ConfigurationProperties(prefix="spring.datasource")
public DataSource primaryDataSource() {
return DataSourceBuilder.create().build();
}
@Bean
@ConfigurationProperties(prefix="spring.datasource2")
public DataSource secondaryDataSource() {
return DataSourceBuilder.create().build();
}
}
public class SecondaryDbService {
@Autowired
private EntityManager em;
@Autowired
private SecondaryCrudRepository dao;
}
interface SecondaryCrudRepository implements CrudRepository<SecondaryEntity, Long> {
}
公共类二次数据库服务{
@自动连线
私人实体管理者;
@自动连线
私人二手储粮道;
}
接口SecondaryCrudepository实现Crudepository{
}
如果按上述方式配置,服务将使用主数据源
问题:我如何告诉
crudepository
依赖“secondaryDataSource”?同样,我如何从“secondaryDataSource”注入EntityManager
?如果您想使用多个数据源,关键是在不同的包中为每个数据源配置。您需要根据实体应该访问的数据源在这些包之间分离实体
您还必须为这些包中的每个数据源实现实体和事务管理器
有多少理论?实际上,它看起来是这样的:
com.package1
- com.package1.entities
- EntityClass1.java (annotated with @Entity)
- ConfigForDataSource1.java
com.package2
- com.package2.entities
- EntityClass2.java (annotated with @Entity)
- ConfigForDataSource2.java
以下是ConfigForDataSource1的外观:
@Configuration
@EnableJpaRepositories(entityManagerFactoryRef = "entityManagerDataSource1",
basePackages = "com.package1",
transactionManagerRef = "TransactionManagerDataSource1")
public class MasterDBConfig {
@Bean(name="DataSource1")
@ConfigurationProperties(prefix = "datasource1.datasource")
public DataSource dataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name="entityManagerDataSource1")
public LocalContainerEntityManagerFactoryBean entityManagerDataSource1(EntityManagerFactoryBuilder builder,@Qualifier("DataSource1") DataSource dataSource) {
return builder.dataSource(dataSource).packages("com.package1").persistenceUnit("DataSource1").build();
}
@Bean(name = "TransactionManagerDataSource1")
public PlatformTransactionManager TransactionManagerDataSource1(@Qualifier("entityManagerDataSource1") EntityManagerFactory entityManagerFactory) {
return new JpaTransactionManager(entityManagerFactory);
}
}
然后对套餐2进行同样的操作并享受
祝你好运 对于数据源/EntityManger,您可以使用
@限定符
-注释。要指定要插入的是,但是辅助EntityManager
或TransactionManager
的名称如何?我假设在创建辅助ds的@Bean
时,它们可能是隐式构建的?我不确定这是否有帮助,但可能需要看看或者我需要自己构建EntityManager
和TxManager
?blogpost没有帮助,因为我在这里没有使用JdbcTemplate
。实际上,当需要使用多个数据库时,必须构建ds、txmanager和emf显式。