Sha*_*our 1 spring-data-jpa spring-boot
我正在尝试配置两个jpa数据源,我做了同样的例子,每件事都很好,但是可以自动完成自动配置,只需添加一个新的,无需LocalContainerEntityManagerFactoryBean手动创建.
@Primary
@Bean(name = "dataSource")
@ConfigurationProperties(prefix="spring.datasource")
public DataSource dataSource() {
return DataSourceBuilder.create().build();
}
@Bean
PlatformTransactionManager transactionManager() {
return new JpaTransactionManager(entityManagerFactory().getObject());
}
@Bean
LocalContainerEntityManagerFactoryBean entityManagerFactory() {
HibernateJpaVendorAdapter jpaVendorAdapter = new HibernateJpaVendorAdapter();
jpaVendorAdapter.setGenerateDdl(false);
LocalContainerEntityManagerFactoryBean factoryBean = new LocalContainerEntityManagerFactoryBean();
factoryBean.setDataSource(dataSource());
factoryBean.setJpaVendorAdapter(jpaVendorAdapter);
factoryBean.setPackagesToScan("com.xxxxxxxx.common.domain","com.xxxxxxx.tekram.cdrserver.domain");
return factoryBean;
}
Run Code Online (Sandbox Code Playgroud)
我不确定你的具体问题是什么,或者你想要实现什么,但我会告诉你如何使用自动配置功能在Spring Boot中使用两个dataSource:
为每个数据源创建配置(在单独的类中只为了更好的阅读):
PrimaryDbConfig.java
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(basePackages = "com.aoc.dao", entityManagerFactoryRef = "entityManager", transactionManagerRef = "transactionManager")
public class PrimaryDBConfiguration {
@Bean(name = "dataSource")
@Primary
@ConfigurationProperties(prefix = "primary.datasource")
public DataSource dataSource() {
return DataSourceBuilder.create().build();
}
@PersistenceContext(unitName = "primary")
@Primary
@Bean(name = "entityManager")
public LocalContainerEntityManagerFactoryBean entityManagerFactory(EntityManagerFactoryBuilder builder) {
return builder.dataSource(dataSource())
.persistenceUnit("primary")
.packages("com.aoc.model")
.build();
}
}
Run Code Online (Sandbox Code Playgroud)
SecondaryDbConfig.java
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(basePackages = "com.aoc.dao", entityManagerFactoryRef = "secondaryEntityManager", transactionManagerRef = "secondaryTransactionManager")
public class SecondaryDBConfiguration {
@Bean
@ConfigurationProperties(prefix = "secondary.datasource")
public DataSource secDataSource() {
return DataSourceBuilder.create().build();
}
@PersistenceContext(unitName = "secondary")
@Bean(name = "secondaryEntityManager")
public LocalContainerEntityManagerFactoryBean entityManagerFactory(EntityManagerFactoryBuilder builder) {
return builder.dataSource(secDataSource())
.persistenceUnit("secondary")
.packages("com.aoc.siri")
.build();
}
@Bean(name = "secondaryTransactionManager")
public PlatformTransactionManager transactionManager(EntityManagerFactoryBuilder builder) {
JpaTransactionManager tm = new JpaTransactionManager();
tm.setEntityManagerFactory(entityManagerFactory(builder).getObject());
tm.setDataSource(secDataSource());
return tm;
}
}
Run Code Online (Sandbox Code Playgroud)
用它分别对每个DAO进行旋转PersistenceContext unitName:
OneDaoImpl.java
@Repository(value = "OneDaoImpl")
public class OneDaoImpl {
@PersistenceContext(unitName="primary")
private EntityManager manager;
public List<AplicacioMsc> getAllOne() {
return (List<One>) manager.createQuery("FROM ONE", One.class).getResultList();
}
}
Run Code Online (Sandbox Code Playgroud)
AnotherDaoImpl.java
@Repository(value = "anotherDaoImpl")
public class AnotherDaoImpl {
@PersistenceContext(unitName = "secondary")
private EntityManager manager;
public List<Producte> getAllAnother() {
return (List<Another>) manager.createQuery("FROM Another", Another.class).getResultList();
}
}
Run Code Online (Sandbox Code Playgroud)
然后在你的 src/main/resources/application.properties
primary.datasource.driver-class-name=...
primary.datasource.url=...
primary.datasource.username=xxx
primary.datasource.password=yyy
secondary.datasource.driver-class-name=...
secondary.datasource.url=...
secondary.datasource.username=zzz
secondary.datasource.password=xxx
Run Code Online (Sandbox Code Playgroud)
您可能知道,如果您使用推荐的Spring Boot软件包命名这些类和anotations,您应该能够同时使用这两个dataSource.
| 归档时间: |
|
| 查看次数: |
3630 次 |
| 最近记录: |