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

SpringBoot3 + Druid + DynamicDataSource + PgSQL 连接池优化方案

问题描述

使用 SpringBoot + Druid + DynamicDataSource + PgSQL 时遇到的连接过多未释放问题,一方面是升级DB Core对DB做Tuning,另一方面是优化Druid数据库连接池方案。

关键优化方向

  1. 连接泄漏检测与回收

  2. 连接有效性验证

  3. 合理的连接池大小配置

  4. 闲置连接回收

  5. 超时控制

Druid 连接池关键优化参数

基础配置

spring:datasource:druid:# 初始化连接数initial-size: 5# 最小空闲连接数min-idle: 5# 最大活跃连接数max-active: 20# 获取连接时最大等待时间(毫秒)max-wait: 60000

连接泄漏检测

      # 是否启用泄漏检测remove-abandoned: true# 连接泄漏超时时间(秒)remove-abandoned-timeout: 300# 泄漏检测日志log-abandoned: true

连接有效性验证

      # 申请连接时检测test-on-borrow: true# 归还连接时检测test-on-return: false# 空闲时检测test-while-idle: true# 验证查询(PostgreSQL)validation-query: SELECT 1# 验证查询超时时间(秒)validation-query-timeout: 1# 空闲连接检测间隔(毫秒)time-between-eviction-runs-millis: 60000# 连接最小空闲时间(毫秒)min-evictable-idle-time-millis: 300000# 保持空闲连接存活的最小时长(毫秒)keep-alive: true

超时控制

      # 连接超时时间(秒)connect-timeout: 10# 查询超时时间(秒)query-timeout: 30# 事务超时时间(秒)transaction-query-timeout: 30

监控配置

      # 启用监控统计stat-view-servlet:enabled: trueurl-pattern: /druid/*# 配置监控统计的过滤器web-stat-filter:enabled: trueurl-pattern: /*

针对 DynamicDataSource 的特殊考虑

由于您使用了动态数据源,还需要注意:

  1. 每个数据源的独立配置:确保为每个数据源单独配置连接池参数

  2. 默认数据源配置:为主数据源设置合理的默认值

  3. 连接池隔离:不同业务使用不同数据源时,连接池应完全隔离

优化实施建议

  1. 监控先行:先启用 Druid 的监控功能(/druid),分析当前连接池状态

  2. 逐步调整:从保守参数开始,逐步调整到最优值

  3. 压力测试:调整后进行压力测试,观察连接池行为

  4. 日志分析:关注连接泄漏日志,修复应用代码中的连接泄漏问题

  5. 结合 PgSQL 配置:同时调整 PostgreSQL 的max_connections参数,确保与连接池配置协调

典型问题排查

  1. 如果发现连接数持续增长不释放,优先检查remove-abandoned相关配置

  2. 如果出现连接获取超时,检查max-waitmax-active配置

  3. 如果出现连接失效问题,加强validation-query和空闲检测配置

通过以上优化,应该能有效解决连接不释放导致的堵塞问题。

http://www.dtcms.com/a/178968.html

相关文章:

  • spring中RequestContextHolder
  • 【WEB3】区块链、隐私计算、AI和Web3.0——隐私计算(2)
  • AI赋能高频PCB信号完整性优化
  • Ubuntu上安装MySQL 8并配置Navicat远程连接
  • Redis如何实现分布式锁
  • CFCA受邀参加盛京银行手机银行7.0发布会
  • crontab
  • 5月8日星期四今日早报简报微语报早读
  • 红外遥控与NEC编码协议详解
  • C#学习7_面向对象:类、方法、修饰符
  • 【AI】DeepWiki 页面转换成 Markdown 保存 - Chrome 扩展
  • 【速通RAG实战:索引】5.RAG分块策略与Embedding技术
  • React -> AI组件 -> 调用Ollama模型, qwen3:1.7B非常聪明
  • 基础算法系列——树的入门
  • Linux_进程退出与进程等待
  • (14)Element Plus项目综合案例
  • 在Hugging Face网站像Github一样克隆repository到本地的具体步骤
  • bootstrap入门
  • 从代码学习深度学习 - 单发多框检测(SSD)PyTorch版
  • nputop:交互式 Ascend NPU 进程查看器(nvitop昇腾版)
  • 谷云科技iPaaS技术实践:集成平台如何解决库存不准等问题
  • Pycharm安装后打开提示:此应用无法在你的电脑上运行,若要找到合适于你的电脑的版本,请咨询发布者
  • Sass @import rules are deprecated and will be removed in Dart Sass 3.0.0.
  • Docker 核心目录结构
  • Python从入门到高手8.3节-元组的常用操作方法
  • Spark存储级别
  • 系统架构设计-真题2024下半年总结
  • Android不能下载Gradle,解决方法Could not install Gradle distribution from.......
  • 第T11周:优化器对比实验
  • Windows环境下MySQL Installer安装后执行`mysql`和`mysql -v`报错的问题解决方法