主数据源:
@Configuration
@EnableTransactionManagement@EnableJpaRepositories(
//repository所在的包
entityManagerFactoryRef = "primaryEntityManagerFactory",
transactionManagerRef = "primaryTransactionManager"
)
public class PrimaryDataConfig {
@Bean
@Primary
@ConfigurationProperties(prefix = "spring.datasource.primary")
public DataSource primaryDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "primaryEntityManagerFactory")
@Primary
public LocalContainerEntityManagerFactoryBean primaryEntityManagerFactory(
EntityManagerFactoryBuilder builder) {
LocalContainerEntityManagerFactoryBean em = builder
.dataSource(primaryDataSource())
//扫描主数据源实体包
.persistenceUnit("primary")
.build();
Properties properties = new Properties();
properties.setProperty("hibernate.physical_naming_strategy", "org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl");
em.setJpaProperties(properties);
return em;
}
@Bean(name = "primaryTransactionManager")
@Primary
PlatformTransactionManager primaryTransactionManager(EntityManagerFactoryBuilder builder) {
return new JpaTransactionManager(primaryEntityManagerFactory(builder).getObject());
}
}
第二数据源:
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
basePackages = "com.xxx.repositories.second",
entityManagerFactoryRef = "secondEntityManagerFactory",
transactionManagerRef = "secondTransactionManager"
)
public class SecondDataConfig {
@Bean
@ConfigurationProperties(prefix = "spring.datasource.second")
public DataSource secondDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "secondEntityManagerFactory")
public LocalContainerEntityManagerFactoryBean secondEntityManagerFactory(
EntityManagerFactoryBuilder builder) {
LocalContainerEntityManagerFactoryBean em = builder
.dataSource(secondDataSource())
.packages("com.xxx.models.second")
.persistenceUnit("second")
.build();
Properties properties = new Properties();
properties.setProperty("hibernate.physical_naming_strategy", "org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy");
em.setJpaProperties(properties);
return em;
}
@Bean(name = "secondTransactionManager")
PlatformTransactionManager secondTransactionManager(EntityManagerFactoryBuilder builder) {
return new JpaTransactionManager(secondEntityManagerFactory(builder).getObject());
}
}
yml配置文件:
spring:
datasource:
primary:
url: xxx
username: xxx
password: xxx
second:
url: xxx
username: xxx
password: xxx
想配置更多数据源可以此类推。