一、添加依赖(Maven/Gradle)
首先需要在项目中引入 Druid 连接池和达梦数据库的 JDBC 驱动依赖。
1. Maven 配置(pom.xml)
xml
<!-- Druid连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.18</version> <!-- 版本可根据最新稳定版调整 -->
</dependency>
<!-- 达梦数据库JDBC驱动(需自行提供,或从达梦安装目录获取) -->
<dependency>
<groupId>com.dameng</groupId>
<artifactId>DmJdbcDriver18</artifactId> <!-- 达梦驱动版本,如18对应DM8 -->
<version>8.1.2.141</version> <!-- 版本需与数据库版本匹配 -->
</dependency>
2. Gradle 配置(build.gradle)
groovy
// Druid连接池
implementation 'com.alibaba:druid-spring-boot-starter:1.2.18'
// 达梦JDBC驱动
implementation 'com.dameng:DmJdbcDriver18:8.1.2.141'
二、核心配置(Spring Boot 环境)
在 application.yml 或 application.properties 中配置 Druid 连接池参数,重点包括数据库连接信息和连接池自身参数。
1. YAML 格式(application.yml)
spring:
datasource:
# 一、基础数据库连接信息(达梦数据库适配)
url: jdbc:dm://localhost:5236/TEST_DB?characterEncoding=utf-8&rewriteBatchedStatements=true
# 达梦URL格式:jdbc:dm://主机IP:端口/数据库名,附加参数说明:
# - characterEncoding=utf-8:指定字符编码
# - rewriteBatchedStatements=true:开启批量操作优化(提升批量插入/更新性能)
username: SYSDBA # 达梦数据库登录用户名(默认管理员用户)
password: SYSDBA # 数据库密码(需根据实际环境修改)
driver-class-name: dm.jdbc.driver.DmDriver # 达梦JDBC驱动类名(固定值,DM8对应此驱动)
# 二、Druid连接池核心配置(前缀:spring.datasource.druid)
druid:
# 1. 连接池初始化与并发控制
initial-size: 5 # 启动时初始化的连接数(建议:根据最小并发量设置,如5-10)
max-active: 50 # 最大活跃连接数(核心参数!需 ≤ 数据库允许的最大连接数,达梦默认MAX_SESSIONS=1000)
min-idle: 5 # 最小空闲连接数(保证空闲时仍有连接可用,避免频繁创建连接)
max-wait: 60000 # 连接等待超时时间(毫秒),超过此时间则抛出异常(避免无限等待)
# 2. 连接有效性验证(防止连接失效导致的报错)
validation-query: SELECT 1 # 验证连接是否有效的SQL语句(达梦支持简单SQL:SELECT 1 或 SELECT COUNT(*) FROM DUAL)
validation-query-timeout: 3000 # 验证SQL的超时时间(毫秒)
test-while-idle: true # 空闲时自动验证连接有效性(推荐开启,避免空闲连接失效)
test-on-borrow: false # 申请连接时验证(建议关闭,否则每次申请都执行SQL,损耗性能)
test-on-return: false # 归还连接时验证(建议关闭,同理损耗性能)
test-on-connect: false # 建立连接时验证(建议关闭,初始化时会额外消耗资源)
# 3. 连接回收与超时控制
time-between-eviction-runs-millis: 60000 # 连接回收线程的执行间隔(毫秒),默认60秒
min-evictable-idle-time-millis: 300000 # 连接最小空闲时间(毫秒),超过此时间则被回收(默认5分钟)
max-evictable-idle-time-millis: 600000 # 连接最大空闲时间(毫秒),超过此时间强制回收(默认10分钟)
remove-abandoned: true # 启用连接泄漏检测(推荐开启,防止连接未关闭导致泄漏)
remove-abandoned-timeout: 1800 # 连接泄漏超时时间(秒),超过此时间未使用则强制关闭
log-abandoned: true # 记录连接泄漏的日志(便于排查泄漏原因)
# 4. SQL预处理语句缓存(提升重复SQL执行效率)
pool-prepared-statements: true # 启用预处理语句池(PSCache)
max-pool-prepared-statement-per-connection-size: 20 # 每个连接的最大预处理语句缓存数量
share-prepared-statements: true # 多个连接共享预处理语句(仅当pool-prepared-statements=true时生效)
# 5. 过滤功能配置(监控、安全、日志等)
filters: stat,wall,log4j2,config # 启用的过滤器,多个用逗号分隔
# 过滤器说明:
# - stat:监控统计(收集连接池状态、SQL执行耗时等)
# - wall:防SQL注入(拦截恶意SQL,保护数据库安全)
# - log4j2:日志记录(输出SQL执行日志,需配合log4j2依赖)
# - config:读取配置文件(支持动态调整参数)
filter:
# 针对wall过滤器的细化配置(防SQL注入)
wall:
enabled: true
db-type: dm # 指定数据库类型为达梦(避免过滤规则不兼容)
config:
delete-allow: true # 允许DELETE语句
drop-table-allow: false # 禁止DROP TABLE语句(防止误删表)
multi-statement-allow: false # 禁止多语句执行(避免批量注入)
# 针对stat过滤器的细化配置(监控统计)
stat:
slow-sql-millis: 2000 # 慢SQL阈值(毫秒),超过此时间的SQL会被标记为慢SQL
log-slow-sql: true # 记录慢SQL日志(便于优化)
merge-sql: true # 合并相同SQL的统计结果(避免重复统计)
# 6. Web监控配置(Druid内置监控页面)
web-stat-filter:
enabled: true # 启用Web请求监控(统计每个URL的SQL执行情况)
url-pattern: /* # 监控所有URL路径
exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*" # 排除静态资源和监控页面自身
session-stat-enable: true # 启用会话统计
session-stat-max-count: 1000 # 最大会话统计数量(超过则清理旧会话)
# 监控页面配置(访问路径:http://localhost:端口/druid)
stat-view-servlet:
enabled: true # 启用监控页面
url-pattern: /druid/* # 监控页面访问路径
login-username: admin # 监控页面登录用户名(生产环境建议修改为复杂账号)
login-password: 123456 # 监控页面登录密码(生产环境必须修改!)
reset-enable: false # 禁止重置监控数据(防止误操作)
allow: 127.0.0.1,192.168.1.0/24 # 允许访问监控页面的IP(白名单,生产环境严格限制)
deny: 192.168.1.100 # 禁止访问的IP(黑名单)
# 7. 密码加密配置(生产环境推荐,避免明文密码泄露)
# 说明:使用Druid提供的加密工具对密码加密后,配置如下参数
connection-properties: config.decrypt=true;config.decrypt.key=你的公钥 # 启用解密,指定公钥
filter.config.enabled: true # 启用配置过滤器(用于解密密码)
# 8. 其他高级配置
async-close-connection-enable: true # 异步关闭连接(提升连接关闭效率,减少阻塞)
use-unfair-lock: true # 使用非公平锁(提升高并发下的连接获取效率)
fail-fast: true # 快速失败机制(连接池初始化失败时立即抛出异常,避免静默失败)
2. Properties 格式(application.properties)
# 达梦数据库连接信息
spring.datasource.url=jdbc:dm://localhost:5236/数据库名?characterEncoding=utf-8
spring.datasource.username=SYSDBA
spring.datasource.password=SYSDBA
spring.datasource.driver-class-name=dm.jdbc.driver.DmDriver
# Druid连接池配置
spring.datasource.druid.initial-size=5
spring.datasource.druid.max-active=20
spring.datasource.druid.min-idle=5
spring.datasource.druid.max-wait=60000
spring.datasource.druid.time-between-eviction-runs-millis=60000
spring.datasource.druid.min-evictable-idle-time-millis=300000
spring.datasource.druid.validation-query=SELECT 1
spring.datasource.druid.test-while-idle=true
spring.datasource.druid.test-on-borrow=false
spring.datasource.druid.test-on-return=false
spring.datasource.druid.pool-prepared-statements=true
spring.datasource.druid.max-pool-prepared-statement-per-connection-size=20
spring.datasource.druid.filters=stat,wall,log4j2
# 监控配置
spring.datasource.druid.web-stat-filter.enabled=true
spring.datasource.druid.web-stat-filter.url-pattern=/*
spring.datasource.druid.web-stat-filter.exclusions=*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*
spring.datasource.druid.stat-view-servlet.enabled=true
spring.datasource.druid.stat-view-servlet.url-pattern=/druid/*
spring.datasource.druid.stat-view-servlet.login-username=druid
spring.datasource.druid.stat-view-servlet.login-password=druid
spring.datasource.druid.stat-view-servlet.reset-enable=false
关键参数调优建议
-
并发相关参数:
max-active:根据应用峰值并发量设置,建议为峰值的 1.2~1.5 倍,且不超过数据库最大连接数(达梦可通过SELECT * FROM V$PARAMETER WHERE NAME = 'MAX_SESSIONS'查询)。initial-size和min-idle:避免设置过大(浪费资源),一般为max-active的 10%~20%。
-
连接有效性验证:
- 必须开启
test-while-idle,否则长时间空闲的连接可能因数据库主动断开而失效,导致应用报错。 validation-query需使用数据库支持的简单 SQL(达梦推荐SELECT 1,执行效率最高)。
- 必须开启
-
生产环境安全配置:
- 务必修改监控页面的
login-username和login-password,并通过allow参数限制访问 IP。 - 启用密码加密功能,避免配置文件中出现明文密码(加密工具可通过 Druid 依赖包中的
com.alibaba.druid.filter.config.ConfigTools类生成公钥和加密密码)。
- 务必修改监控页面的
-
日志与监控:
- 开启
log-slow-sql便于定位慢查询,结合监控页面的 "SQL 监控" 模块优化 SQL。 - 避免开启
test-on-borrow和test-on-return,否则会显著降低性能。
- 开启
依赖补充
若启用 log4j2 过滤器,需在 pom.xml 中添加日志依赖(避免过滤器初始化失败):
xml
<!-- log4j2 日志依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
通过以上配置,可实现 Druid 连接池的稳定运行、全面监控和安全防护,适配达梦数据库的生产环境需求。
示例:
# 数据源配置 spring: datasource: type: com.alibaba.druid.pool.DruidDataSource driverClassName: dm.jdbc.driver.DmDriver druid: # 主库数据源 master: url: jdbc:dm://localhost:5236/ username: SYSDBA password: SYSDBA # 从库数据源 slave: # 从数据源开关/默认关闭 enabled: false url: username: password: # 初始连接数 initialSize: 5 # 最小连接池数量 minIdle: 10 # 最大连接池数量 maxActive: 20 # 配置获取连接等待超时的时间 maxWait: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 timeBetweenEvictionRunsMillis: 60000 # 配置一个连接在池中最小生存的时间,单位是毫秒 minEvictableIdleTimeMillis: 300000 # 配置一个连接在池中最大生存的时间,单位是毫秒 maxEvictableIdleTimeMillis: 900000 # 配置检测连接是否有效 validationQuery: SELECT 1 FROM DUAL testWhileIdle: true testOnBorrow: false testOnReturn: false webStatFilter: enabled: true statViewServlet: enabled: true # 设置白名单,不填则允许所有访问 allow: url-pattern: /druid/* # 控制台管理用户名和密码 login-username: ruoyi login-password: 123456 filter: stat: enabled: true # 慢SQL记录 log-slow-sql: true slow-sql-millis: 1000 merge-sql: true wall: config: multi-statement-allow: true