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

【Spring Boot】Druid 连接池 YAML 配置详解

文章目录

  • 一、Druid 连接池 YAML 配置详解
    • 基础配置
    • 高级配置
    • 监控配置
    • 过滤器详细配置
    • 多数据源配置
    • 生产环境推荐配置
    • 配置优化建议
  • 二、拓展
    • 1、分析慢SQL日志的方法
      • 1. 查看慢SQL日志
        • 访问Druid监控界面
        • 直接查看日志文件
      • 2. 分析慢SQL的关键维度
      • 3. 常见慢SQL优化方法
        • 索引优化
        • SQL语句重构
        • 数据库设计优化
      • 4. 定期分析建议
      • 5. 高级分析技巧

一、Druid 连接池 YAML 配置详解

Druid 是阿里巴巴开源的数据库连接池,提供强大的监控和扩展功能。以下是完整的 YAML 配置说明和优化建议。

基础配置

spring:datasource:type: com.alibaba.druid.pool.DruidDataSourcedruid:# 基本连接配置url: jdbc:mysql://localhost:3306/db_name?useSSL=false&serverTimezone=UTCusername: rootpassword: 123456driver-class-name: com.mysql.cj.jdbc.Driver# 连接池大小配置initial-size: 5        # 初始化连接数min-idle: 5            # 最小空闲连接数max-active: 20         # 最大连接数max-wait: 60000        # 获取连接等待超时时间(毫秒)# 连接有效性检查validation-query: SELECT 1test-while-idle: true   # 空闲时检查连接有效性test-on-borrow: false   # 获取连接时不检查(影响性能)test-on-return: false   # 归还连接时不检查# 连接回收配置time-between-eviction-runs-millis: 60000  # 检查间隔(毫秒)min-evictable-idle-time-millis: 300000    # 连接最小生存时间max-evictable-idle-time-millis: 900000    # 连接最大生存时间

高级配置

spring:datasource:druid:# 连接属性配置connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=1000# 过滤器配置(统计、监控、防火墙等)filters: stat,wall,slf4j# 启用PSCache(MySQL建议关闭)pool-prepared-statements: falsemax-pool-prepared-statement-per-connection-size: -1# 全局数据源配置use-global-data-source-stat: true# 连接泄漏检测remove-abandoned: true                  # 是否移除泄露连接remove-abandoned-timeout: 1800         # 泄露连接回收超时(秒)log-abandoned: true                    # 记录泄露日志# 异步初始化async-init: true

监控配置

spring:datasource:druid:# Web统计过滤器配置web-stat-filter:enabled: trueurl-pattern: /*exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"session-stat-enable: truesession-stat-max-count: 100# StatViewServlet配置(监控页面)stat-view-servlet:enabled: trueurl-pattern: /druid/*reset-enable: falselogin-username: adminlogin-password: adminallow: 127.0.0.1,192.168.1.1deny: 192.168.1.100

过滤器详细配置

spring:datasource:druid:filter:stat:enabled: truelog-slow-sql: true          # 记录慢SQLslow-sql-millis: 1000       # 慢SQL阈值(毫秒)merge-sql: true              # 合并相似SQLwall:enabled: trueconfig:drop-table-allow: false    # 禁止DROP TABLEalter-table-allow: false   # 禁止ALTER TABLEdelete-where-none-check: true  # 检查无WHERE的DELETEconfig:enabled: true

多数据源配置

spring:datasource:druid:# 主数据源master:url: jdbc:mysql://master-host:3306/dbusername: master_userpassword: master_passinitial-size: 5max-active: 20# 从数据源slave:enabled: trueurl: jdbc:mysql://slave-host:3306/dbusername: slave_userpassword: slave_passinitial-size: 5max-active: 15# 公共配置stat-view-servlet:enabled: trueurl-pattern: /druid/*

生产环境推荐配置

spring:datasource:druid:# 连接池核心配置initial-size: 5min-idle: 5max-active: 50max-wait: 60000# 连接有效性检查validation-query: SELECT 1test-while-idle: truetest-on-borrow: falsetest-on-return: false# 连接回收time-between-eviction-runs-millis: 60000min-evictable-idle-time-millis: 300000# 监控配置filters: stat,wallweb-stat-filter:enabled: truestat-view-servlet:enabled: truelogin-username: monitorlogin-password: monitor123allow: 10.10.10.1,192.168.1.0/24# 防火墙配置filter:wall:config:delete-where-none-check: truemulti-statement-allow: false

配置优化建议

  1. 连接池大小

    • initial-sizemin-idle 建议相同
    • max-active 根据应用负载调整,通常20-100
  2. MySQL 8小时问题

    time-between-eviction-runs-millis: 60000      # 1分钟检查一次
    min-evictable-idle-time-millis: 28000000     # 7小时46分钟(略小于8小时)
    
  3. 监控安全

    • 务必修改监控页面的默认账号密码
    • 配置IP白名单限制访问
  4. 慢SQL监控

    filter:stat:slow-sql-millis: 1000       # 定义慢SQL阈值log-slow-sql: true          # 记录慢SQL
    
  5. 防火墙规则

    • 生产环境应启用wall过滤器
    • 根据业务需要配置安全规则

通过以上配置,可以充分发挥Druid连接池的高性能和强大监控能力,适合企业级应用场景。

二、拓展

1、分析慢SQL日志的方法

开启慢SQL日志后(Druid配置如下),您可以通过以下步骤有效分析和优化慢查询:

filter:stat:enabled: true# 慢SQL记录log-slow-sql: trueslow-sql-millis: 1000  # 执行超过1秒的SQL会被记录merge-sql: true        # 合并相似SQL

1. 查看慢SQL日志

访问Druid监控界面
  1. 应用启动后访问 http://你的域名或IP:端口/druid
  2. 使用配置的用户名密码登录(示例中为ruoyi/123456)
  3. 在"SQL监控"和"慢SQL"标签页查看记录
直接查看日志文件

如果配置了日志输出,可以在应用日志中搜索"slow sql"相关记录

2. 分析慢SQL的关键维度

在监控界面中,重点关注以下列:

列名说明分析要点
SQLSQL语句内容识别是否有全表扫描、复杂连接
执行次数该SQL被执行的次数高频SQL优先优化
执行时间总耗时和最大耗时找出最耗时的操作
影响行数扫描/返回的行数检查是否扫描过多数据
数据源来自主库还是从库判断读写分离是否合理

3. 常见慢SQL优化方法

索引优化
  1. 检查WHERE条件字段是否有索引
    EXPLAIN SELECT * FROM users WHERE username = 'test';
    
  2. 避免索引失效的情况:
    • 使用!=<>NOT IN
    • 对字段进行函数操作WHERE DATE(create_time) = '2023-01-01'
    • 隐式类型转换WHERE user_id = '123'(user_id是int)
SQL语句重构
  1. 减少SELECT *,只查询需要的列
  2. 拆分复杂查询,避免多表JOIN时产生笛卡尔积
  3. 使用分页查询避免大数据量返回
    -- 不好
    SELECT * FROM orders;-- 较好
    SELECT id, order_no, amount FROM orders LIMIT 20 OFFSET 0;
    
数据库设计优化
  1. 考虑大表分库分表
  2. 适当增加冗余字段减少JOIN操作
  3. 对TEXT/BLOB大字段单独存表

4. 定期分析建议

  1. 设置自动报表:定期(如每周)导出慢SQL统计
  2. 建立优化清单:按影响程度(Pareto原则)排序处理
  3. 性能测试验证:优化后对比执行计划和时间
  4. 监控趋势:观察慢SQL数量是否随业务增长而增加

5. 高级分析技巧

  1. 使用EXPLAIN分析执行计划

    EXPLAIN FORMAT=JSON SELECT * FROM orders WHERE user_id = 100;
    
  2. 关联应用日志:将慢SQL与当时的请求参数、业务场景关联分析

  3. 使用性能分析工具

    • Percona Toolkit的pt-query-digest
    • MySQL Enterprise Monitor
    • VividCortex等专业APM工具

通过系统性地分析慢SQL日志,您可以显著提升数据库性能,通常能解决80%以上的数据库性能问题。

http://www.xdnf.cn/news/1080343.html

相关文章:

  • 三、docker软件安装:gitlab,nexus,mysql8,redis,nacos,nginx
  • Apache RocketMQ进阶之路阅读笔记和疑问
  • 高职院校“赛岗课”一体化网络安全实战类人才培养方案
  • python -二叉树路径和为指定的值(根节点到叶子节点)
  • 译码器Multisim电路仿真汇总——硬件工程师笔记
  • 【机器学习深度学习】什么是下游任务模型?
  • 【STM32实践篇】:I2C驱动编写
  • 【模糊集合】示例
  • 【机器学习深度学习】AI 项目开发流程:从需求到部署的五大阶段
  • 机器学习安装使用教程
  • Python训练营打卡Day59(2025.7.3)
  • java教程——初识guava(2)
  • 这才叫窗口查询!TDEngine官方文档没讲透的实战玩法
  • 认识kubernetes kubeadm安装k8s
  • Web基础关键_007_JavaScript 的 DOM
  • 34. 在排序数组中查找元素的第一个和最后一个位置
  • WPF学习笔记(22)项面板模板ltemsPanelTemplate与三种模板总结
  • 【进阶篇-消息队列】——Kafka如何实现事务的
  • R 语言安装使用教程
  • 物联网MQTT协议与实践:从零到精通的硬核指南
  • 【2.4 漫画SpringBoot实战】
  • Java的SpringAI+Deepseek大模型实战之会话记忆
  • Qt Creator自定义控件开发流程
  • Windows 10 2016 长期服务版
  • WPF学习笔记(16)树控件TreeView与数据模板
  • 刷卡登入数据获取
  • MySQL的窗口函数介绍
  • Redis—哨兵模式
  • 相机光学(四十八)——渐晕
  • [自然语言处理]计算语言的熵