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

发布于:2025-05-27 ⋅ 阅读:(36) ⋅ 点赞:(0)

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

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

1. 基础配置(application.yml

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... 确认连接池初始化成功:

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

<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

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. 添加达梦方言配置类

@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:连接泄漏检测

@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);
        }
    }
}

预期日志

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. 连接池参数建议

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. 安全加固

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配置
    druid:
      remove-abandoned: true
      remove-abandoned-timeout: 300  # 5分钟未关闭连接强制回收
    
  2. 分析日志中abandoned connection警告定位代码

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


网站公告

今日签到

点亮在社区的每一天
去签到