Spring Boot + KingbaseES 連接池實戰

文章目錄

  • 一、前言
  • 二、什么是數據庫連接池?
  • 三、SpringBoot + KingbaseES 環境準備
    • 3.1 加依賴(pom.xml)
    • 3.2 基礎連接信息(application.yml)
  • 四、四類主流連接池實戰
    • 4.1 DBCP(遷移型 / 傳統項目友好)
      • SpringBoot配置方式
      • application.yml配置
      • 實際應用示例
    • 4.2 C3P0
      • SpringBoot配置方式
    • 4.3 Druid(生產推薦 + 可視化)
      • application.yml配置
      • SpringBoot配置方式
    • 4.4 HikariCP(SpringBoot默認 / 高性能首選)
      • application.yml配置
      • SpringBoot配置方式
  • 五、總結

一、前言

在做企業級項目時,我們常常一邊催進度、一邊盯性能:頁面得快、接口得穩,背后最“默默無聞”卻又至關重要的那部分,往往就是數據庫連接管理。要是真到高峰期才現開連接,應用就像高鐵只剩一條候車通道 —— 堵,全線慢。于是,連接池這種“提前把通道鋪好、閘機開好”的機制,就成了性能優化的基本盤。

在國產數據庫里,KingbaseES這幾年在醫療,交通等對可靠性、合規性要求極高的場景里越用越多。很多團隊在把原本的Oracle、PostgreSQL體系平滑遷移到KingbaseES之后,會立刻面臨一個現實問題:到底選哪個連接池?DBCP老牌穩健,C3P0歷史悠久但偏重,Druid監控維度豐富又接地氣,HikariCP主打“極致輕快”。本文就結合Spring Boot的真實開發場景,把這四種主流方案的配置思路、適用特征與優化要點一次講清,幫你少走彎路。

二、什么是數據庫連接池?

簡單說,數據庫連接池就是在程序真正“要水”之前,先把水桶排好、龍頭擰開,等你來接;而不是每次渴了再去打一趟井水。創建和關閉數據庫連接本身是昂貴的系統操作:握手、認證、分配資源,步驟一個不能少。如果每個HTTP請求都臨時建連、用完就銷毀,系統資源就會被這些重復動作消耗掉,吞吐量和響應時間都會被拖慢。連接池的做法是:啟動或空閑階段先準備一批可用連接(最小池);高峰期可按規則擴容(最大池);請求來時“借”一條,用完“還”回去;若有“壞桶”(失效連接),再做檢測和重建。結果是:響應更穩定、抖動更小,還能通過統計與監控為后續容量評估提供數據支撐。

三、SpringBoot + KingbaseES 環境準備

三步心智模型:

  1. 加依賴(讓項目知道怎么連庫)
  2. 填地址(告訴它去哪里、用誰登錄)
  3. 驗連通(啟動時或寫個最小 SQL 探活)

3.1 加依賴(pom.xml)

最少必備 = JDBC + 驅動 + 選一個連接池(別全塞上,沖突或白占空間)。

<dependencies><!-- Spring JDBC 基礎 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><!-- KingbaseES 驅動(版本鎖定,跟服務器一致) --><dependency><groupId>com.kingbase8</groupId><artifactId>kingbase8</artifactId><version>8.6.0</version></dependency><!-- 連接池:三選一(推薦 Hikari 或 Druid) --><!-- Druid(生產監控友好) --><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.2.18</version></dependency><!-- 或 Apache DBCP2(老系統遷移) --><dependency><groupId>org.apache.commons</groupId><artifactId>commons-dbcp2</artifactId></dependency><!-- 或 HikariCP(高性能 / Spring Boot 默認) --><dependency><groupId>com.zaxxer</groupId><artifactId>HikariCP</artifactId></dependency>
</dependencies>

提示: 如果用 Spring Boot Starter,很多情況下不必單獨引 HikariCP,它已內嵌。

3.2 基礎連接信息(application.yml)

一定核對四件套:地址 / 端口 / 庫名 / 賬號密碼 + 驅動類名。

kingbase:driver-class-name: com.kingbase8.Driverurl: jdbc:kingbase8://127.0.0.1:54321/TESTusername: SYSTEMpassword: SYSTEM

小建議:
生產別寫死密碼 → 用環境變量或外部化配置(如:ENC、K8S Secret)
若多數據源,分前綴管理,別混在 spring.datasource 根層

四、四類主流連接池實戰

DBCP: 老黃牛,穩但不花哨。
C3P0: 功能多,參數細,適合“歷史復雜場景”兜底。
Druid: 自帶監控 + SQL 防火墻,運維愛。
HikariCP: 快、輕、現代、高并發友好。

4.1 DBCP(遷移型 / 傳統項目友好)

看點:initial-size / max-total / validation-query 三核心。

SpringBoot配置方式

@Configuration
public class DbcpDataSourceConfig {@Bean@Primary@ConfigurationProperties(prefix = "spring.datasource.dbcp")public DataSource dbcpDataSource() {return new BasicDataSource();}
}

application.yml配置

spring:datasource:dbcp:driver-class-name: com.kingbase8.Driverurl: jdbc:kingbase8://127.0.0.1:54321/TESTusername: SYSTEMpassword: MANAGERinitial-size: 5max-total: 50min-idle: 5max-idle: 20validation-query: SELECT 'x'test-on-borrow: truetest-while-idle: truetime-between-eviction-runs-millis: 60000min-evictable-idle-time-millis: 1800000

實際應用示例

@Service
public class UserService {@Autowiredprivate JdbcTemplate jdbcTemplate;public List<User> findAllUsers() {return jdbcTemplate.query("SELECT id, name, email FROM users",(rs, i) -> {User u = new User();u.setId(rs.getLong("id"));u.setName(rs.getString("name"));u.setEmail(rs.getString("email"));return u;});}
}

4.2 C3P0

核心參數:
acquireIncrement:不夠時一次加多少
idleConnectionTestPeriod:健康巡檢周期(秒)
preferredTestQuery:輕量探活

SpringBoot配置方式

@Bean
public DataSource c3p0DataSource() throws PropertyVetoException {ComboPooledDataSource ds = new ComboPooledDataSource();ds.setDriverClass("com.kingbase8.Driver");ds.setJdbcUrl("jdbc:kingbase8://127.0.0.1:54321/TEST");ds.setUser("SYSTEM");ds.setPassword("SYSTEM");ds.setInitialPoolSize(5);ds.setMinPoolSize(5);ds.setMaxPoolSize(50);ds.setAcquireIncrement(3);ds.setIdleConnectionTestPeriod(10);ds.setPreferredTestQuery("SELECT 1");ds.setMaxIdleTime(1800);return ds;
}

注意: 巡檢太頻繁(如 <5s)會浪費資源;查詢語句盡量輕。

4.3 Druid(生產推薦 + 可視化)

優點:SQL 監控、慢 SQL、Wall 防注入、Web 控制臺一站式。

application.yml配置

spring:datasource:druid:driver-class-name: com.kingbase8.Driverurl: jdbc:kingbase8://127.0.0.1:54321/TESTusername: SYSTEMpassword: MANAGERinitial-size: 5max-active: 50min-idle: 5max-wait: 60000time-between-eviction-runs-millis: 60000min-evictable-idle-time-millis: 1800000validation-query: SELECT 'x'test-while-idle: truetest-on-borrow: falsetest-on-return: falsefilters: stat,wall,log4j2web-stat-filter:enabled: trueurl-pattern: /*exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"stat-view-servlet:enabled: trueurl-pattern: /druid/*reset-enable: falselogin-username: adminlogin-password: admin123

SpringBoot配置方式

@Configuration
public class DruidConfig {@Bean@ConfigurationProperties("spring.datasource.druid")public DataSource druidDataSource() {return new DruidDataSource();}@Beanpublic ServletRegistrationBean<StatViewServlet> druidStatViewServlet() {ServletRegistrationBean<StatViewServlet> bean =new ServletRegistrationBean<>(new StatViewServlet(), "/druid/*");bean.addInitParameter("loginUsername", "admin");bean.addInitParameter("loginPassword", "admin123");bean.addInitParameter("resetEnable", "false");return bean;}
}

控制臺路徑:/druid/index.html
賬號密碼務必生產自定義 + 限制 IP

4.4 HikariCP(SpringBoot默認 / 高性能首選)

特點:啟動快、延遲低、參數少、容錯好。

application.yml配置

spring:datasource:hikari:driver-class-name: com.kingbase8.Driverjdbc-url: jdbc:kingbase8://127.0.0.1:54321/TESTusername: SYSTEMpassword: SYSTEMminimum-idle: 5maximum-pool-size: 50connection-timeout: 10000idle-timeout: 600000max-lifetime: 1800000validation-timeout: 5000connection-test-query: SELECT 1pool-name: KingbaseHikariCPauto-commit: trueleak-detection-threshold: 60000

SpringBoot配置方式

@Configuration
public class HikariTunedConfig {@Bean@Primary@ConfigurationProperties(prefix = "spring.datasource.hikari")public HikariDataSource hikariDataSource() {HikariDataSource ds = new HikariDataSource();ds.addDataSourceProperty("cachePrepStmts", "true");ds.addDataSourceProperty("prepStmtCacheSize", "250");ds.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");ds.addDataSourceProperty("useServerPrepStmts", "true");return ds;}
}

五、總結

如果把數據庫訪問想成辦公室喝水:別每次口渴才跑去打井(臨時建連接),而是先備好一排干凈水杯(連接池)。

在 Spring Boot + KingbaseES 里,HikariCP 就像那臺又快又省心的新式飲水機,默認首選;

Druid 像帶大屏的智能款,能看水量、過濾雜質(監控與防護),適合需要可視化和審計的團隊;

DBCP、C3P0 則更像老設備,除非歷史原因暫時換不動,否則不用再投入。

真正的優化不是把“杯子”堆得越多越好,而是先弄清高峰時有多少人會來、每個人平均用多久,然后設一個剛好撐得住又不浪費的位置,再盯慢查詢和長事務,及時清理“卡著不放的杯子”。一句話:先選對(優先 Hikari,需監控加 Druid),再測清楚,再精調,持續看指標,系統就會既穩又順。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/95173.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/95173.shtml
英文地址,請注明出處:http://en.pswp.cn/web/95173.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

矩陣待辦ios app Tech Support

Getting Support: mail: 863299715qq.com

React中優雅管理CSS變量的最佳實踐

在現代前端開發中&#xff0c;CSS變量&#xff08;也稱為CSS自定義屬性&#xff09;已成為管理樣式系統的重要工具。它們提供了強大的動態樣式能力&#xff0c;但在JavaScript中高效地訪問和使用這些變量卻存在一些挑戰。本文將介紹一個優化的解決方案&#xff0c;幫助你在Reac…

智能制造——解讀裝備制造業智能工廠解決方案【附全文閱讀】

適應人群為裝備制造企業(如汽車、航空航天、能源裝備等)中高層管理者、生產運營負責人、IT 部門(智能制造 / 工業互聯網團隊)、安全管理專員及園區數字化建設決策者。主要內容圍繞裝備制造業智能工廠解決方案展開,核心包括建設背景(解決生產安全管理缺失、工序手工記錄無…

macos調用chrome后臺下載wasm-binaries.tar.xz

實現腳本: down_wasm.sh DOWNLOAD_DIR="$HOME/Downloads" TARGET_FILE="wasm-binaries.tar.xz" TAG="32b8ae819674cb42b8ac2191afeb9571e33ad5e2" TARGET_DIR="$HOME/Desktop/sh/emsdk_setup/emsdk_deps"echo "下載路徑: $DOW…

【Proteus仿真】按鍵控制系列仿真——LED燈表示按鍵狀態/按鍵控制LED燈/4*4矩陣鍵盤控制LED

目錄 1案例視頻效果展示 1.1例子1&#xff1a;LED燈表示按鍵狀態(兩種方式) 1.2例子2&#xff1a;按鍵控制兩排LED小燈閃爍移位 1.3例子3&#xff1a;按鍵控制LED燈逐個點亮/分組點亮/全部熄滅 1.4例子4&#xff1a;4*4矩陣按鍵實現帶狀LED燈控制 2例子1&#xff1a;LED燈…

829作業

用fgets&#xff0c;fputswanc代碼#include<myhead.h> int main(int argc, const char *argv[]) {FILE *fp1 NULL;FILE *fp2 NULL;if (argc ! 3){printf("輸入不合法:./a.out lydf.txt l.txt\n");return -1;}if ((fp1fopen(argv[1],"w"))NULL){pri…

CRMEB小程序訂閱消息配置完整教程(PHP版)附常見錯誤解決

登錄小程序后臺 1.進入微信公眾平臺、小程序后臺&#xff1a;功能->訂閱消息。&#xff08;如未開通&#xff0c;點擊申請即可開通&#xff09; 選擇服務類目 2.選擇服務類目&#xff1a;生活服務/百貨/超市/便利店 同步小程序訂閱消息 3.商城后臺設置->消息管理 點擊…

【已解決】阿里云服務器上前端訪問不到后端

最開始我覺得后端根本沒跑起來&#xff0c;但是我沒用過阿里云的服務器&#xff0c;對pm2指令也完全不熟&#xff0c;不確定后端是不是在哪個我不知道的地方跑著。 還以為在阿里云控制臺點運行&#xff0c;服務就會自己跑起來&#xff0c;但遠程連接之后發現搞著搞著&#xff0…

分治算法詳解:從遞歸思想到經典應用實戰

分治算法是計算機科學中最重要的算法設計策略之一&#xff0c;它將復雜問題分解為規模更小的同類子問題&#xff0c;通過遞歸求解子問題并合并結果來解決原問題。本文將深入探討分治算法的核心思想、設計模式以及經典應用案例。 文章目錄一、分治算法核心思想1.1 分治策略的三個…

GitHub 熱榜項目 - 日榜(2025-08-31)

GitHub 熱榜項目 - 日榜(2025-08-31) 生成于&#xff1a;2025-08-31 統計摘要 共發現熱門項目&#xff1a;15 個 榜單類型&#xff1a;日榜 本期熱點趨勢總結 本期GitHub熱榜凸顯三大技術熱點&#xff1a;1) AI基礎設施爆發式增長&#xff0c;微軟MCP協議和Activepieces的A…

OpenCL C 平臺與設備

1. 核心概念在 OpenCL C API 中&#xff1a;平臺 (Platform)&#xff1a;代表一個 OpenCL 實現&#xff0c;通常對應硬件廠商&#xff08;NVIDIA、AMD、Intel等&#xff09;設備 (Device)&#xff1a;具體的計算硬件單元&#xff08;GPU、CPU、加速器等&#xff09;上下文 (Con…

R語言貝葉斯方法在生態環境領域中的高階技術應用

貝葉斯統計已經被廣泛應用到物理學、生態學、心理學、計算機、哲學等各個學術領域&#xff0c;其火爆程度已經跨越了學術圈。一&#xff1a; 1.1復雜數據回歸&#xff08;混合效應&#xff09;模型的選擇策略 1&#xff09;科學研究中數據及其復雜性 2&#xff09;回歸分析歷史…

學習筆記:MySQL(day1)

DDL&#xff08;Data Definition Language&#xff0c;數據定義語言&#xff09;是 SQL 語言的一部分&#xff0c;用于定義和管理數據庫中的數據結構&#xff0c;包括創建、修改、刪除數據庫對象&#xff08;如數據庫、表、視圖、索引等&#xff09;。常見的 DDL 語句及其功能&…

C++ 模板初階:從函數重載到泛型編程的優雅過渡

&#x1f525;個人主頁&#xff1a;愛和冰闊樂 &#x1f4da;專欄傳送門&#xff1a;《數據結構與算法》 、C &#x1f436;學習方向&#xff1a;C方向學習愛好者 ?人生格言&#xff1a;得知坦然 &#xff0c;失之淡然 文章目錄前言一、引言&#xff1a;函數重載的痛點與模板…

從零開始的python學習——語句

? ? ? ? ? づ?ど &#x1f389; 歡迎點贊支持&#x1f389; 個人主頁&#xff1a;勵志不掉頭發的內向程序員&#xff1b; 專欄主頁&#xff1a;python學習專欄&#xff1b; 文章目錄 前言 一、順序語句 二、條件語句 2.1、什么是條件語句 2.2、語法格式 2.3、縮進和代碼…

Python基礎之元組列表集合字典

目錄一、元組&#xff08;Turple&#xff09;1.1、概念定義注意事項1.2、常見操作元組只支持查詢操作&#xff0c;不支持增刪改操作。查詢元素二、列表1.1、概念定義注意事項1.2、常見操作添加修改查找刪除排序列表推導式列表嵌套三、集合1.1、概念定義集合的特點1.2、常見操作…

Ubuntu 22.04 安裝 向日葵遠程Client端

通過向日葵主頁的下載deb包有可能遇到安裝失敗的情況 #因向向日葵提供的libwebkit包是4.0-37了,而向日葵依賴的是3.0.0(Reading database ... 303666 files and directories currently installed.) Preparing to unpack SunloginClient-10.1.1.38139_amd64.deb.1 ... sunloginc…

Linux中卸載和安裝Nginx

阿里云寶塔linux為例一&#xff1a;卸載1.停止 Nginx 服務# 檢查Nginx運行狀態 systemctl status nginx# 停止Nginx服務 sudo systemctl stop nginx# 禁用開機自啟 sudo systemctl disable nginx2. 卸載 Nginx 軟件包# 查看已安裝的Nginx包 yum list installed | grep nginx# 卸…

C++知識匯總(5)

目錄 1.寫在前面 1.C11的發展歷史 2.序列表初始化 3&#xff0c;C11中的std::initializer_list 4.左值和右值 1.左值引用和右值引用 2.生命周期的延長 3.左值和右值的參數匹配 4&#xff0c;移動構造和移動賦值 5.引用折疊 6.完美轉發 總結 1.可變模板參數 2.包擴展…

LeetCode 每日一題 2025/8/25-2025/8/31

記錄了初步解題思路 以及本地實現代碼&#xff1b;并不一定為最優 也希望大家能一起探討 一起進步 目錄8/25 498. 對角線遍歷8/26 3000. 對角線最長的矩形的面積8/27 3459. 最長 V 形對角線段的長度8/28 3446. 按對角線進行矩陣排序8/29 3021. Alice 和 Bob 玩鮮花游戲8/30 36.…