内容简介:这是展示一个SpringBoot应用程序,它使用两个数据源(两个MySQL数据库,一个命名players_db,一个命名coaches_db)和两个连接池(每个数据库使用自己的HikariCP连接池,具有不同的设置)。基于上述配置,从两个不同的提供程序配置两个连接池非常容易。关键点:1. 在pom.xml,添加spring-boot-configuration-processor依赖项
这是展示一个SpringBoot应用程序,它使用两个数据源(两个 MySQL 数据库,一个命名players_db,一个命名coaches_db)和两个连接池(每个数据库使用自己的HikariCP连接池,具有不同的设置)。基于上述配置,从两个不同的提供程序配置两个连接池非常容易。
关键点:
1. 在pom.xml,添加spring-boot-configuration-processor依赖项
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
2. 在application.properties,自定义两个配置两个HikariCP连接池,例如app.datasource.ds1和app.datasource.ds2
app.datasource.ds1.url=jdbc:mysql://localhost:3306/players_db?createDatabaseIfNotExist=true app.datasource.ds1.username=root app.datasource.ds1.password=root app.datasource.ds1.connection-timeout=50000 app.datasource.ds1.idle-timeout=300000 app.datasource.ds1.max-lifetime=900000 app.datasource.ds1.maximum-pool-size=8 app.datasource.ds1.minimum-idle=8 app.datasource.ds1.pool-name=MyPoolDS1 app.datasource.ds1.connection-test-query=select 1 from dual app.datasource.ds2.url=jdbc:mysql://localhost:3306/coaches_db?createDatabaseIfNotExist=true app.datasource.ds2.username=root app.datasource.ds2.password=root app.datasource.ds2.connection-timeout=50000 app.datasource.ds2.idle-timeout=300000 app.datasource.ds2.max-lifetime=900000 app.datasource.ds2.maximum-pool-size=4 app.datasource.ds2.minimum-idle=4 app.datasource.ds2.pool-name=MyPoolDS2 app.datasource.ds2.connection-test-query=select 1 from dual spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect logging.level.com.zaxxer.hikari.HikariConfig=DEBUG logging.level.com.zaxxer.hikari=TRACE spring.jpa.show-sql=true
3. 写一个@Bean返回第一个DataSource并将其标记为@Primary
写另一个@Bean返回第二个DataSource
@Configuration
public class ConfigureDataSources {
@Bean(name = "c1")
@Primary
@ConfigurationProperties("app.datasource.ds1")
public DataSourceProperties firstDataSourceProperties() {
return new DataSourceProperties();
}
@Bean(name = "c2")
@ConfigurationProperties("app.datasource.ds2")
public DataSourceProperties secondDataSourceProperties() {
return new DataSourceProperties();
}
@Bean(name = "ds1")
@Primary
@ConfigurationProperties("app.datasource.ds1")
public HikariDataSource firstDataSource(@Qualifier("c1") DataSourceProperties properties) {
return properties.initializeDataSourceBuilder().type(HikariDataSource.class)
.build();
}
@Bean(name = "ds2")
@ConfigurationProperties("app.datasource.ds2")
public HikariDataSource secondDataSource(@Qualifier("c2") DataSourceProperties properties) {
return properties.initializeDataSourceBuilder().type(HikariDataSource.class)
.build();
}
}
4. 配置两个EntityManagerFactory并指出要扫描每个包的包
@Configuration
@EnableJpaRepositories(
entityManagerFactoryRef = "ds1EntityManagerFactory",
transactionManagerRef = "ds1TransactionManager",
basePackages = "com.jpa.ds1"
)
@EnableTransactionManagement
public class FirstEntityManagerFactory {
@Bean
@Primary
public LocalContainerEntityManagerFactoryBean ds1EntityManagerFactory(
EntityManagerFactoryBuilder builder, @Qualifier("ds1") DataSource dataSource) {
return builder
.dataSource(dataSource)
.packages(packagesToScan())
.persistenceUnit("ds1-pu")
.properties(singletonMap("hibernate.hbm2ddl.auto", "create"))
.build();
}
@Bean
@Primary
public PlatformTransactionManager ds1TransactionManager(
@Qualifier("ds1EntityManagerFactory") EntityManagerFactory ds1EntityManagerFactory) {
return new JpaTransactionManager(ds1EntityManagerFactory);
}
protected String[] packagesToScan() {
return new String[]{
"com.jpa.ds1"
};
}
}
4.将每个与EntityManager相关领域模型和存储库放在正确的包中:
ds1包目录: Player.java PlyaerRepository.java PlayerService.java
ds2包目录:Coach.java CoachRepository.java CoachService.java
源代码可以在 这里 找到
以上所述就是小编给大家介绍的《如何在Hibernate/JPA中配置具有两个连接池的两个数据源》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 搞定 Spring Boot 多数据源(二):动态数据源
- 数据源管理 | 基于JDBC模式,适配和管理动态数据源
- 苞米豆-多数据源 3.4.0 发布:本地多数据源事务优化
- 苞米豆-多数据源 3.3.0 重磅更新:本地多数据源事务方案
- 苞米豆-多数据源 2.3.2 发布:支持 spel 从参数获取数据源
- Spring项目中使用两种方法动态切换数据源,多数据源切换
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
构建之法(第二版)
邹欣 / 人民邮电出版社 / 2015-7 / 59
软件工程牵涉的范围很广, 同时也是一般院校的同学反映比较空洞乏味的课程。 但是软件工程的技术对于投身IT 产业的学生来说是非常重要的。作者邹欣有长达20年的一线软件开发经验,他利用业余时间在数所高校进行了长达6年的软件工程教学实践,总结出了在16周的时间内让同学们通过 “做中学 (Learning By Doing)” 掌握实用的软件工程技术的教学计划,并得到高校师生的积极反馈。在此基础上,作者对......一起来看看 《构建之法(第二版)》 这本书的介绍吧!