Spring?Boot?快速使用?HikariCP?連接池配置詳解
Spring Boot 使用 HikariCP 連接池配置詳解
HikariCP 是一個(gè)高性能的 JDBC 連接池組件。
Spring Boot 2.x 將其作為默認(rèn)的連接池組件,項(xiàng)目中添加 spring-boot-starter-jdbc
或 spring-boot-starter-data-jpa
模塊后,HikariCP 依賴(lài)會(huì)被自動(dòng)引入。
快速使用
1)在你的 Spring Boot 項(xiàng)目中添加依賴(lài)配置:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency>
注意:以下常用的 ORM 組件中已經(jīng)包含了 JDBC 依賴(lài),不需要重復(fù)引入:
- spring-boot-starter-data-jpa
- mybatis-spring-boot-starter
- mybatis-plus-boot-starter
2)添加數(shù)據(jù)源配置:
## Spring HikaraDataSource Configuration # spring.datasource.type=com.zaxxer.hikari.HikariDataSource # spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver # spring.datasource.name=HikariCP-1 spring.datasource.url=jdbc:mysql://localhost:3306/dbname?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&autoReconnect=true&autoReconnectForPools=true&noAccessToProcedureBodies=true&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull spring.datasource.username=root spring.datasource.password=123456 spring.datasource.hikari.connection-timeout=30000 spring.datasource.hikari.idle-timeout=600000 spring.datasource.hikari.max-lifetime=1800000 spring.datasource.hikari.maximum-pool-size=100 spring.datasource.hikari.minimum-idle=10 spring.datasource.hikari.pool-name=HikaraPool-1
連接池配置詳解
1)在 Spring Boot 項(xiàng)目中,一個(gè)簡(jiǎn)單的 Spring DataSource 配置,通常只需要設(shè)置數(shù)據(jù)庫(kù)連接、用戶(hù)名和密碼三個(gè)參數(shù)。
## Spring DataSourceProperties # 設(shè)置連接池類(lèi)型,默認(rèn)自動(dòng)獲取(可選) spring.datasource.type=com.zaxxer.hikari.HikariDataSource # 設(shè)置數(shù)據(jù)庫(kù)驅(qū)動(dòng),默認(rèn)自動(dòng)獲取(可選) spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver # 生成唯一的數(shù)據(jù)源名稱(chēng),設(shè)置與否,都會(huì)優(yōu)先取 name 的值(可選) spring.datasource.generate-unique-name=true # 設(shè)置數(shù)據(jù)源名稱(chēng),默認(rèn)會(huì)生成唯一的數(shù)據(jù)源名稱(chēng),如:HikariPool-1(可選) spring.datasource.name=HikariCP-1 # 設(shè)置數(shù)據(jù)庫(kù)連接(必選) spring.datasource.url=jdbc:mysql://localhost:3306/dbname?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&autoReconnect=true&autoReconnectForPools=true&noAccessToProcedureBodies=true&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull # 設(shè)置數(shù)據(jù)庫(kù)用戶(hù)名(必選) spring.datasource.username=root # 設(shè)置數(shù)據(jù)庫(kù)密碼(必選) spring.datasource.password=123456
2)在 Spring Boot 項(xiàng)目中, Spring DataSource 會(huì)使用默認(rèn)的配置啟用 HikaraCP 數(shù)據(jù)庫(kù)連接池。我們也可以通過(guò)屬性文件來(lái)優(yōu)化 HikariCP 的配置項(xiàng),尤其是連接池大小的設(shè)置。
## Spring HikariConfig # 事務(wù)自動(dòng)提交 - 默認(rèn)值:true spring.datasource.hikari.auto-commit=true # 連接測(cè)試查詢(xún) - Using the JDBC4 <code>Connection.isValid()</code> method to test connection validity can be more efficient on some databases and is recommended. # 如果你的驅(qū)動(dòng)程序支持JDBC4,強(qiáng)烈建議不要設(shè)置此屬性。 spring.datasource.hikari.connection-test-query=select 1 # 連接超時(shí)時(shí)間 - 默認(rèn)值:30秒。 spring.datasource.hikari.connection-timeout=30000 # 連接池中允許閑置的最長(zhǎng)時(shí)間 - 默認(rèn)值:10分鐘 spring.datasource.hikari.idle-timeout=600000 # 一個(gè)連接生命時(shí)長(zhǎng)(毫秒),超時(shí)而沒(méi)被使用則被釋放 - 默認(rèn)值:30分鐘 spring.datasource.hikari.max-lifetime=1800000 # 連接池中允許的最大連接數(shù),包括閑置和使用中的連接 - 默認(rèn)值:10 spring.datasource.hikari.maximum-pool-size=100 # 連接池中允許的最小空閑連接數(shù) - 默認(rèn)值:10。 spring.datasource.hikari.minimum-idle=10 # 連接被測(cè)試活動(dòng)的最長(zhǎng)時(shí)間 - 默認(rèn)值:5秒。 spring.datasource.hikari.validation-timeout=5000 # 指定連接池的名稱(chēng) - 默認(rèn)自動(dòng)生成 spring.datasource.hikari.pool-name=HikaraPool-1
多數(shù)據(jù)源配置
1)添加多數(shù)據(jù)源配置:
## Spring HikaraDataSource Configuration # spring.datasource.one.driver-class-name=com.mysql.cj.jdbc.Driver # spring.datasource.one.name=HikariCP-1 spring.datasource.one.url=jdbc:mysql://localhost:3306/kaddo-sit?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&autoReconnect=true&autoReconnectForPools=true&noAccessToProcedureBodies=true&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull spring.datasource.one.username=root spring.datasource.one.password=123456 spring.datasource.one.hikari.connection-timeout=30000 spring.datasource.one.hikari.idle-timeout=600000 spring.datasource.one.hikari.max-lifetime=1800000 spring.datasource.one.hikari.maximum-pool-size=100 spring.datasource.one.hikari.minimum-idle=10 spring.datasource.one.hikari.pool-name=HikaraPool-1 ## Spring HikaraDataSource Configuration # spring.datasource.two.driver-class-name=com.mysql.cj.jdbc.Driver # spring.datasource.two.name=HikariCP-2 spring.datasource.two.url=jdbc:mysql://localhost:3306/kaddo-uat?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&autoReconnect=true&autoReconnectForPools=true&noAccessToProcedureBodies=true&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull spring.datasource.two.username=root spring.datasource.two.password=123456 spring.datasource.two.hikari.connection-timeout=30000 spring.datasource.two.hikari.idle-timeout=600000 spring.datasource.two.hikari.max-lifetime=1800000 spring.datasource.two.hikari.maximum-pool-size=100 spring.datasource.two.hikari.minimum-idle=10 spring.datasource.two.hikari.pool-name=HikaraPool-2
2)創(chuàng)建多數(shù)據(jù)源:
@Bean @Primary @ConfigurationProperties("spring.datasource.one") public DataSourceProperties dataSourcePropertiesOne() { return new DataSourceProperties(); } @Bean @Primary @ConfigurationProperties("spring.datasource.one.hikari") public HikariDataSource dataSourceOne(DataSourceProperties properties) { return createHikariDataSource(properties); } @Bean @ConfigurationProperties("spring.datasource.two") public DataSourceProperties dataSourcePropertiesTwo() { return new DataSourceProperties(); } @Bean @ConfigurationProperties("spring.datasource.two.hikari") public HikariDataSource dataSourceTwo(@Qualifier("dataSourcePropertiesTwo") DataSourceProperties properties) { return createHikariDataSource(properties); } @SuppressWarnings("unchecked") private static <T> T createHikariDataSource(DataSourceProperties properties, Class<? extends DataSource> type) { return (T) properties.initializeDataSourceBuilder().type(type).build(); } /** * 創(chuàng)建 HikariDataSource 數(shù)據(jù)源 * * @param properties 參數(shù) * @return 數(shù)據(jù)源 */ private static HikariDataSource createHikariDataSource(DataSourceProperties properties) { HikariDataSource dataSource = createHikariDataSource(properties, HikariDataSource.class); if (StringUtils.hasText(properties.getName())) { dataSource.setPoolName(properties.getName()); } return dataSource; }
3)使用多數(shù)據(jù)源:
@Autowired private HikariDataSource dataSourceOne; @Autowired @Qualifier("dataSourceTwo") private HikariDataSource dataSourceTwo;
配置多數(shù)據(jù)源的注意事項(xiàng):
- 配置多數(shù)據(jù)源時(shí),最好通過(guò) @Primary 指定默認(rèn)數(shù)據(jù)源。
- 創(chuàng)建數(shù)據(jù)源對(duì)象時(shí),建議使用 HikariDataSource 代替 DataSource。
- 創(chuàng)建數(shù)據(jù)源對(duì)象時(shí),注意通過(guò) @Qualifier(“dataSourcePropertiesTwo”) 來(lái)指定數(shù)據(jù)源的配置屬性對(duì)象。
- 創(chuàng)建數(shù)據(jù)源對(duì)象時(shí),注意創(chuàng)建 Bean 的方法名,最好通過(guò) @Bean(“dataSourceOne”) 來(lái)指定數(shù)據(jù)源對(duì)象的名稱(chēng)。
- 多數(shù)據(jù)源通常結(jié)合 ORM 框架一起使用,具體可參考 Kaddo 框架的 ORM 配置。
到此這篇關(guān)于Spring Boot 使用 HikariCP 連接池配置詳解的文章就介紹到這了,更多相關(guān)Spring Boot 使用 HikariCP 連接池內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot自動(dòng)初始化數(shù)據(jù)庫(kù)的方法分享
我們?cè)陧?xiàng)目中應(yīng)該經(jīng)常遇到過(guò)初始化數(shù)據(jù)的場(chǎng)景,特別是項(xiàng)目部署或者交付的時(shí)候,那么有什么方式可以在項(xiàng)目啟動(dòng)的時(shí)候自動(dòng)初始化數(shù)據(jù)庫(kù)呢,下面小編就來(lái)和大家分享幾個(gè)方法吧2023-08-08Java+MyBatis+MySQL開(kāi)發(fā)環(huán)境搭建流程詳解
Java的MyBatis框架提供了強(qiáng)大的數(shù)據(jù)庫(kù)操作支持,這里我們先在本地的開(kāi)發(fā)環(huán)境中上手,來(lái)看一下Java+MyBatis+MySQL開(kāi)發(fā)環(huán)境搭建流程詳2016-06-06Springboot配置全局跨域未生效,訪問(wèn)接口報(bào)錯(cuò)問(wèn)題及解決
這篇文章主要介紹了Springboot配置全局跨域未生效,訪問(wèn)接口報(bào)錯(cuò)問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12解決Request.getParameter獲取不到特殊字符bug問(wèn)題
這篇文章主要介紹了解決Request.getParameter獲取不到特殊字符bug問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07SpringMVC使用第三方組件實(shí)現(xiàn)文件上傳
這篇文章主要介紹了SpringMVC使用第三方組件實(shí)現(xiàn)文件上傳,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08Java selenium截圖操作的實(shí)現(xiàn)
這篇文章主要介紹了Java selenium截圖操作的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08Java之map的常見(jiàn)用法講解與五種循環(huán)遍歷實(shí)例代碼理解
map是一組鍵值對(duì)的組合,通俗理解類(lèi)似一種特殊的數(shù)組,a[key]=val,只不過(guò)數(shù)組元素的下標(biāo)是任意一種類(lèi)型,而且數(shù)組的元素的值也是任意一種類(lèi)型。有點(diǎn)類(lèi)似python中的字典。通過(guò)"鍵"來(lái)取值,類(lèi)似生活中的字典,已知索引,來(lái)查看對(duì)應(yīng)的信息2021-09-09Spring Boot集成Mybatis中如何顯示日志的實(shí)現(xiàn)
這篇文章主要介紹了Spring Boot集成Mybatis中如何顯示日志的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07Java中生產(chǎn)者消費(fèi)者問(wèn)題總結(jié)
這篇文章主要介紹了Java中生產(chǎn)者消費(fèi)者問(wèn)題總結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07