当前位置: 首页 > web >正文

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.xdnf.cn/news/19099.html

相关文章:

  • 【C#/Cpp】CLR项目搭建的内联和托管两选项
  • 基于uni-app的iOS应用上架,从打包到分发的全流程
  • 大模型推荐系统新标杆!EGA-V2端到端大模型驱动推荐系统
  • Ansys Electronics Desktop 2025 R2 软件界面介绍
  • Java线程池深度解析:从原理到实战的完整指南
  • orbslam2语义分割
  • 工业级TF卡NAND+北京君正+Rk瑞芯微的应用
  • 人工智能-python-深度学习-过拟合与欠拟合:概念、判断与解决方法
  • 【Bluedroid】A2DP Source设备音频数据读取机制分析(btif_a2dp_source_read_callback)
  • Solidity合约编程基础知识
  • Java 多线程环境下的全局变量缓存实践指南
  • jwt原理及Java中实现
  • Ckman部署clickhouse
  • 5.2 I/O软件
  • 横扫SQL面试——流量与转化率分类
  • C++《哈希表》
  • Unity游戏打包——iOS打包pod的重装和使用
  • Servlet 注解:简化配置的完整指南
  • 大模型微调示例四之Llama-Factory-DPO
  • 若依cloud集训总结
  • 汉字这颗穿越时空的智慧之光,在未来绽放出更加耀眼的光芒
  • 深入解析Java并发编程与单例模式
  • 文件系统挂载详细分析(《图解Linux内核》虚拟文件系统篇笔记三)
  • 神经网络为何能 “学习”?从神经元到深度学习模型的层级结构解析
  • 打破存储局限:CS 创世 SD NAND 如何优化瑞芯微(RK)与北京君正平台的贴片式 SD 卡性能
  • 【C++成长之旅】C++入门基础:从 Hello World 到命名空间与函数重载的系统学习
  • Bscan Bonding Chain
  • 印度尼西亚数据源 PHP 对接文档
  • Mysql——分库分表
  • Redis发布订阅:实时消息系统的极简解决方案