达梦数据库连接配置yaml 文件配置

一、添加依赖(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.ymlapplication.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

关键参数调优建议

  1. 并发相关参数

    • max-active:根据应用峰值并发量设置,建议为峰值的 1.2~1.5 倍,且不超过数据库最大连接数(达梦可通过 SELECT * FROM V$PARAMETER WHERE NAME = 'MAX_SESSIONS' 查询)。
    • initial-sizemin-idle:避免设置过大(浪费资源),一般为 max-active 的 10%~20%。
  2. 连接有效性验证

    • 必须开启 test-while-idle,否则长时间空闲的连接可能因数据库主动断开而失效,导致应用报错。
    • validation-query 需使用数据库支持的简单 SQL(达梦推荐 SELECT 1,执行效率最高)。
  3. 生产环境安全配置

    • 务必修改监控页面的 login-usernamelogin-password,并通过 allow 参数限制访问 IP。
    • 启用密码加密功能,避免配置文件中出现明文密码(加密工具可通过 Druid 依赖包中的 com.alibaba.druid.filter.config.ConfigTools 类生成公钥和加密密码)。
  4. 日志与监控

    • 开启 log-slow-sql 便于定位慢查询,结合监控页面的 "SQL 监控" 模块优化 SQL。
    • 避免开启 test-on-borrowtest-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
相关推荐
小-黯6 小时前
Linux硬盘挂载脚本
linux·运维·服务器
TDengine (老段)6 小时前
TDengine 数学函数 PI 用户手册
大数据·数据库·时序数据库·iot·tdengine·涛思数据
运维帮手大橙子6 小时前
最近面试题总结
linux·服务器·网络
aristo_boyunv6 小时前
Redis发布订阅【充当消息中间件】
数据库·redis·缓存
zz-zjx7 小时前
MySQL 开源主从复制实战指南(SRE 可靠性优先版)
数据库·mysql·开源
Madison-No713 小时前
【Linux】gcc/g++编辑器 && 初识动静态库 && 程序翻译过程
linux·服务器
小白不想白a13 小时前
【shell】每日shell练习:安全日志入侵检测/系统配置文件合规检查
运维·服务器
洛克大航海14 小时前
Linux 中新建用户
linux·运维·服务器
Microsoft Word14 小时前
向量数据库与RAG
数据库·人工智能·向量数据库·rag