内容简介:这是展示一个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项目中使用两种方法动态切换数据源,多数据源切换
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Learning JavaScript
Shelley Powers / Oreilly & Associates Inc / 2006-10-17 / $29.99
As web browsers have become more capable and standards compliant, JavaScript has grown in prominence. JavaScript lets designers add sparkle and life to web pages, while more complex JavaScript has led......一起来看看 《Learning JavaScript》 这本书的介绍吧!