[Java实战]Spring Boot整合达梦数据库连接池配置(三十四)

[Java实战]Spring Boot整合达梦数据库连接池配置(三十四)

一、HikariCP连接池配置(默认)

1. 基础配置(application.yml

yaml 复制代码
spring:
  datasource:
    driver-class-name: dm.jdbc.driver.DmDriver
    url: jdbc:dm://localhost:5236/DB_NAME?schema=SYSDBA
    username: SYSDBA
    password: SYSDBA
    # HikariCP连接池配置
    hikari:
      pool-name: DM-HikariPool
      connection-timeout: 30000  # 连接超时时间(ms)
      maximum-pool-size: 20      # 最大连接数
      minimum-idle: 5           # 最小空闲连接
      idle-timeout: 600000      # 空闲连接超时时间(ms)
      max-lifetime: 1800000     # 连接最大存活时间(ms)
      connection-test-query: SELECT 1 FROM DUAL

2. 验证配置生效

在应用启动日志中搜索 HikariPool-1 - Starting... 确认连接池初始化成功:

log 复制代码
2024-05-26 14:20:00.123 INFO  [main] com.zaxxer.hikari.HikariDataSource 
- HikariPool-1 - Starting...
2024-05-26 14:20:01.456 INFO  [main] com.zaxxer.hikari.HikariDataSource 
- HikariPool-1 - Start completed.

二、Druid连接池配置(推荐监控功能)

1. 添加Druid依赖(pom.xml

xml 复制代码
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.2.18</version>
</dependency>
        <!-- 达梦JDBC驱动 -->
 <dependency>
        <groupId>com.dameng</groupId>
        <artifactId>Dm8JdbcDriver18</artifactId>
        <version>8.1.1.49</version>
 </dependency>

2. 完整配置(application.yml

yaml 复制代码
spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: dm.jdbc.driver.DmDriver
    url: jdbc:dm://localhost:5236/DB_NAME?schema=SYSDBA
    username: SYSDBA
    password: SYSDBA
    
    druid:
      # 连接池核心配置
      initial-size: 5
      min-idle: 5
      max-active: 20
      max-wait: 60000
      
      # 监控配置
      filter:
        stat:
          enabled: true
          log-slow-sql: true
          slow-sql-millis: 2000
      web-stat-filter:
        enabled: true
      stat-view-servlet:
        enabled: true
        url-pattern: /druid/*
        login-username: admin
        login-password: admin123

3. 添加达梦方言配置类

java 复制代码
@Configuration
public class DruidConfig {

    @Bean
    public DruidStatInterceptor druidStatInterceptor() {
        return new DruidStatInterceptor();
    }

    @Bean
    @Role(BeanDefinition.ROLE_INFRASTRUCTURE)
    public Advisor druidStatAdvisor() {
        return new DefaultPointcutAdvisor(
            new AnnotationMatchingPointcut(WebService.class, null),
            druidStatInterceptor()
        );
    }
}

4. 访问监控页面

启动应用后访问监控面板:
http://localhost:8080/druid/login.html

使用配置的用户名密码登录(示例中为admin/admin123

三、连接池验证测试

测试1:连接泄漏检测

java 复制代码
@SpringBootTest
public class ConnectionLeakTest {

    @Autowired
    private DataSource dataSource;

    @Test
    public void testConnectionLeak() throws SQLException {
        for(int i=0; i<30; i++) {
            Connection conn = dataSource.getConnection();
            // 未关闭连接,触发连接池警告
            System.out.println("获取连接:"+conn);
        }
    }
}

预期日志

log 复制代码
ERROR [alibaba.druid.pool.DruidDataSource] - discard connection, 
activeCount 20, maxActive 20

测试2:性能压力测试

使用JMeter模拟100并发查询请求,观察连接池表现:

监控指标 正常范围 异常处理建议
ActiveCount <= maxActive 调大maxActive
WaitThreadCount 持续>0 检查慢SQL或连接泄漏
PoolingCount ≈ maxActive/2 调整initialSize/minIdle

四、生产环境最佳实践

1. 连接池参数建议

yaml 复制代码
druid:
  max-active: 50            # 根据DB最大连接数设置
  initial-size: 10
  min-idle: 10
  max-wait: 3000            # 获取连接超时时间
  time-between-eviction-runs-millis: 60000  # 检测间隔
  min-evictable-idle-time-millis: 300000     # 最小空闲时间

2. 安全加固

yaml 复制代码
druid:
  filter:
    wall:
      config:
        delete-allow: false   # 禁止DELETE无WHERE
        drop-table-allow: false

3. 定期监控指标

  • 活跃连接数DataSource.getActiveCount()
  • 等待线程数DataSource.getWaitThreadCount()
  • SQL执行时间:通过Druid监控页查看

五、常见问题解决

问题1:连接池初始化失败

错误信息Failed to initialize pool: Unknown database 'DB_NAME'
解决方案

  1. 检查达梦服务是否运行
  2. 验证数据库名称是否正确
  3. 确认用户权限:SYSDBA默认有DBA权限

问题2:连接泄漏

现象 :活跃连接数持续增长不释放
排查步骤

  1. 启用Druid的removeAbandoned配置

    yaml 复制代码
    druid:
      remove-abandoned: true
      remove-abandoned-timeout: 300  # 5分钟未关闭连接强制回收
  2. 分析日志中abandoned connection警告定位代码

希望本教程对您有帮助,请点赞❤️收藏⭐关注支持!欢迎在评论区留言交流技术细节!

相关推荐
lifallen7 分钟前
Apache Paimon:存储结构、写入及其源码分析
java·大数据·数据仓库·sql·flink·database
召田最帅boy18 分钟前
基于URL弹窗的图片链接生成功能技术实现
android·java·javascript
阿楠不会敲代码32 分钟前
分布式数据库备份实践
数据库·分布式
gsls20080835 分钟前
阿里云云效对接SDK获取流水线制品
数据库
菠萝0135 分钟前
分布式不同数据的一致性模型
数据库·c++·分布式·后端
Code哈哈笑39 分钟前
【基于SpringBoot的图书购买系统】操作Jedis对图书图书的增-删-改:从设计到实战的全栈开发指南
java·spring boot·后端·spring·交互·jedis
珹洺42 分钟前
计算机操作系统(十四)互斥锁,信号量机制与整型信号量
java·redis·缓存
爱编程的小新☆42 分钟前
【MySQL】联合查询(下)
数据库·sql·mysql
蓝色的猴子1 小时前
JUC 包
java
IDRSolutions_CN1 小时前
如何用命令行将 PDF 表格转换为 HTML 表格
java·经验分享·pdf·软件工程·团队开发