相关文档:
配置文件:
spring:
datasource:
url: jdbc:mysql://localhost:3306/cshomeback?useUnicode=true&characterEncoding=utf8&useSSL=false
driver-class-name: com.mysql.jdbc.Driver
username: root
password: 123456
hikari:
autoCommit: true
connection-timeout: 30000
idle-timeout: 600000
max-lifetime: 1800000
connection-test-query: SELECT 1
minimum-idle: 10
maximum-pool-size: 15
pool-name: csHomeBack
jpa:
show-sql: false
database: mysql
# 第二个数据源,次要的
lf:
datasource:
url: jdbc:mysql://localhost:3306/lingfeng_24?useUnicode=true&characterEncoding=utf8&useSSL=false
driver-class-name: com.mysql.jdbc.Driver
username: root
password: 123456
hikari:
autoCommit: true
connection-timeout: 30000
idle-timeout: 600000
max-lifetime: 1800000
connection-test-query: SELECT 1
minimum-idle: 10
maximum-pool-size: 15
pool-name: kf24
Spring Bean实体配置:
PrimaryDataSourceConfig 主数据源
LFDataSourceConfig 其他数据源
如果有更多可继续配置...
主数据源
/**
* <p>
* 如果配置了数据源,那么原本的 SpringBoot 配置将失效
* <p>
* 注解@Primary 拥有重复Bean优先使用
* 注解@Qualifier 通过名字指定加载Bean
* <p>
* description: PrimaryDataSourceConfig
* date: 2020/4/23 11:00
* author: zeng
*/
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
entityManagerFactoryRef = "entityManagerFactory",
basePackages = {
"com.gr.zyg.cshomeback.*.dao",
"com.gr.zyg.cshomeback.*.*.dao",
"com.gr.zyg.cshomeback.*.*.dao.impl"}
)
public class PrimaryDataSourceConfig {
/**
* 用来接收数据源参数
* 例:username url password....
* 等等一些基础的连接参数
*/
@Bean(name = "dataSourceProperties")
@Primary
@ConfigurationProperties("spring.datasource")
public DataSourceProperties dataSourceProperties() {
return new DataSourceProperties();
}
/**
* 配置连接池
*/
@Bean(name = "dataSource")
@Primary
@ConfigurationProperties("spring.datasource.hikari")
public HikariDataSource dataSource(@Qualifier("dataSourceProperties") DataSourceProperties properties) {
return properties.initializeDataSourceBuilder().type(HikariDataSource.class).build();
}
/**
* Entity 实体管理
*/
@Primary
@Bean(name = "entityManagerFactory")
public LocalContainerEntityManagerFactoryBean entityManagerFactory(
EntityManagerFactoryBuilder builder, @Qualifier("dataSource") DataSource dataSource) {
Map<String, Object> jpaProperties = new HashMap<>();
// application.yml 中的jpa配置失效,将在这里设置。
jpaProperties.put("hibernate.hbm2ddl.auto", "update");
return builder.dataSource(dataSource).packages(
"com.gr.zyg.cshomeback.*.entity",
"com.gr.zyg.cshomeback.*.*.entity"
).properties(jpaProperties).build();
}
/**
* 事务管理
*/
@Primary
@Bean(name = "transactionManager")
public PlatformTransactionManager transactionManager(
@Qualifier("entityManagerFactory") EntityManagerFactory entityManagerFactory) {
return new JpaTransactionManager(entityManagerFactory);
}
}
次要数据源
/**
*
* description: DataSourceConfig
* date: 2020/4/22 18:22
* author: zeng
*/
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
entityManagerFactoryRef = "lfEntityManagerFactory",
transactionManagerRef = "lfTransactionManager",
basePackages = {"com.gr.zyg.cshomeback.multiserver.lingfeng24.*.dao"}
)
public class LFDataSourceConfig {
@Bean(name = "lfDataSourceProperties")
@ConfigurationProperties("lf.datasource")
public DataSourceProperties lfDataSourceProperties() {
return new DataSourceProperties();
}
@Bean(name = "lfDataSource")
@ConfigurationProperties("lf.datasource.hikari")
public HikariDataSource lfDataSource(@Qualifier("lfDataSourceProperties") DataSourceProperties properties) {
return properties.initializeDataSourceBuilder().type(HikariDataSource.class).build();
}
@Bean(name = "lfEntityManagerFactory")
public LocalContainerEntityManagerFactoryBean entityManagerFactory(
EntityManagerFactoryBuilder builder, @Qualifier("lfDataSource") DataSource dataSource) {
return builder.dataSource(dataSource).packages(
"com.gr.zyg.cshomeback.multiserver.lingfeng24.*.entity"
).build();
}
@Bean(name = "lfTransactionManager")
public PlatformTransactionManager transactionManager(
@Qualifier("lfEntityManagerFactory") EntityManagerFactory entityManagerFactory) {
return new JpaTransactionManager(entityManagerFactory);
}
}
如果有自定义HQL,请指定 EntityManage
@Autowired
@Qualifier("entityManagerFactory")
private EntityManager em;
至此多数据源配置完成
启动SpringBoot: