欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot連接KingbaseES數(shù)據(jù)庫連接池實戰(zhàn)指南

 更新時間:2025年08月29日 08:50:38   作者:熊文豪  
本文將結合Spring Boot的真實開發(fā)場景,為大家詳細介紹四種主流方案的配置思路,適用特征與優(yōu)化要點一次講清,文中的示例代碼講解詳細,感興趣的小伙伴可以了解下

一、前言

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

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

二、什么是數(shù)據(jù)庫連接池

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

三、SpringBoot + KingbaseES 環(huán)境準備

三步心智模型:

  • 加依賴(讓項目知道怎么連庫)
  • 填地址(告訴它去哪里、用誰登錄)
  • 驗連通(啟動時或寫個最小 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(生產監(jiān)控友好) -->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid-spring-boot-starter</artifactId>
        <version>1.2.18</version>
    </dependency>
    <!-- 或 Apache DBCP2(老系統(tǒng)遷移) -->
    <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.Driver
  url: jdbc:kingbase8://127.0.0.1:54321/TEST
  username: SYSTEM
  password: SYSTEM

小建議:

生產別寫死密碼 → 用環(huán)境變量或外部化配置(如:ENC、K8S Secret)

若多數(shù)據(jù)源,分前綴管理,別混在 spring.datasource 根層

四、四類主流連接池實戰(zhàn)

DBCP: 老黃牛,穩(wěn)但不花哨。

C3 P0: 功能多,參數(shù)細,適合“歷史復雜場景”兜底。

Druid: 自帶監(jiān)控 + SQL 防火墻,運維愛。

HikariCP: 快、輕、現(xiàn)代、高并發(fā)友好。

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

看點: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.Driver
      url: jdbc:kingbase8://127.0.0.1:54321/TEST
      username: SYSTEM
      password: MANAGER
      initial-size: 5
      max-total: 50
      min-idle: 5
      max-idle: 20
      validation-query: SELECT 'x'
      test-on-borrow: true
      test-while-idle: true
      time-between-eviction-runs-millis: 60000
      min-evictable-idle-time-millis: 1800000

實際應用示例

@Service
public class UserService {
    @Autowired
    private 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 C3 P0

核心參數(shù):

  • 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(生產推薦 + 可視化)

優(yōu)點:SQL 監(jiān)控、慢 SQL、Wall 防注入、Web 控制臺一站式。

application.yml配置

spring:
  datasource:
    druid:
      driver-class-name: com.kingbase8.Driver
      url: jdbc:kingbase8://127.0.0.1:54321/TEST
      username: SYSTEM
      password: MANAGER
      initial-size: 5
      max-active: 50
      min-idle: 5
      max-wait: 60000
      time-between-eviction-runs-millis: 60000
      min-evictable-idle-time-millis: 1800000
      validation-query: SELECT 'x'
      test-while-idle: true
      test-on-borrow: false
      test-on-return: false
      filters: stat,wall,log4j2
      web-stat-filter:
        enabled: true
        url-pattern: /*
        exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"
      stat-view-servlet:
        enabled: true
        url-pattern: /druid/*
        reset-enable: false
        login-username: admin
        login-password: admin123

SpringBoot配置方式

@Configuration
public class DruidConfig {
    @Bean
    @ConfigurationProperties("spring.datasource.druid")
    public DataSource druidDataSource() {
        return new DruidDataSource();
    }
    @Bean
    public 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默認 / 高性能首選)

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

application.yml配置

spring:
  datasource:
    hikari:
      driver-class-name: com.kingbase8.Driver
      jdbc-url: jdbc:kingbase8://127.0.0.1:54321/TEST
      username: SYSTEM
      password: SYSTEM
      minimum-idle: 5
      maximum-pool-size: 50
      connection-timeout: 10000
      idle-timeout: 600000
      max-lifetime: 1800000
      validation-timeout: 5000
      connection-test-query: SELECT 1
      pool-name: KingbaseHikariCP
      auto-commit: true
      leak-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;
    }
}


五、總結

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

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

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

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

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

到此這篇關于SpringBoot連接KingbaseES數(shù)據(jù)庫連接池實戰(zhàn)指南的文章就介紹到這了,更多相關SpringBoot連接KingbaseES連接池內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • java分割字符串多種方法(附例子)

    java分割字符串多種方法(附例子)

    這篇文章主要給大家介紹了關于java分割字符串多種方法的相關資料,Java中有多種方法可以實現(xiàn)字符串分割,文中將每張方法都給出了代碼示例,需要的朋友可以參考下
    2023-10-10
  • 淺談Spring Boot中如何干掉if else的方法

    淺談Spring Boot中如何干掉if else的方法

    這篇文章主要介紹了Spring Boot中如何干掉if else的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-09-09
  • mybatis 根據(jù)id批量刪除的實現(xiàn)操作

    mybatis 根據(jù)id批量刪除的實現(xiàn)操作

    這篇文章主要介紹了mybatis 根據(jù)id批量刪除的實現(xiàn)操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • 關于Cannot?resolve?com.microsoft.sqlserver:sqljdbc4:4.0報錯問題解決辦法

    關于Cannot?resolve?com.microsoft.sqlserver:sqljdbc4:4.0報錯問題解

    這篇文章主要給大家介紹了關于Cannot?resolve?com.microsoft.sqlserver:sqljdbc4:4.0報錯問題的解決辦法,這個是在pom文件中添加依賴出現(xiàn)報錯問題,需要的朋友可以參考下
    2024-02-02
  • Mybatis實現(xiàn)增刪改查

    Mybatis實現(xiàn)增刪改查

    這篇文章主要介紹了Mybatis實現(xiàn)增刪改查,文章圍繞主題展開詳細的內容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-01-01
  • 如何解決springboot數(shù)據(jù)庫查詢時出現(xiàn)的時區(qū)差異問題

    如何解決springboot數(shù)據(jù)庫查詢時出現(xiàn)的時區(qū)差異問題

    這篇文章主要介紹了如何解決springboot數(shù)據(jù)庫查詢時出現(xiàn)的時區(qū)差異問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • 解決微服務下Mybatis?xml無效綁定問題及分析Invalid?bound?statement

    解決微服務下Mybatis?xml無效綁定問題及分析Invalid?bound?statement

    這篇文章主要介紹了解決微服務下Mybatis?xml無效綁定問題及分析Invalid?bound?statement,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • springboot中server.ssl.key-store配置路徑的問題小結

    springboot中server.ssl.key-store配置路徑的問題小結

    這篇文章主要介紹了springboot中server.ssl.key-store配置路徑的問題,文中還記錄了Spring Boot SSL(https)實例,介紹在web程序中使用自簽名的SSL(HTTPS)證書及創(chuàng)建SSL認證,感興趣的朋友跟隨小編一起看看吧
    2024-02-02
  • Java中InputSteam怎么轉String

    Java中InputSteam怎么轉String

    面了一位實習生,叫他給我說一下怎么把InputStream轉換為String,這種常規(guī)的操作,他竟然都沒有用過我準備結合工作經驗,整理匯集出了InputStream 到String 轉換的十八般武藝,助大家闖蕩 Java 江湖一臂之力,需要的朋友可以參考下
    2021-06-06
  • MybatisPlus代碼生成器含XML文件詳解

    MybatisPlus代碼生成器含XML文件詳解

    這篇文章主要介紹了MybatisPlus代碼生成器含XML文件詳解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01

最新評論