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

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

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

1. 基础配置(application.yml

spring:datasource:driver-class-name: dm.jdbc.driver.DmDriverurl: jdbc:dm://localhost:5236/DB_NAME?schema=SYSDBAusername: SYSDBApassword: SYSDBA# HikariCP连接池配置hikari:pool-name: DM-HikariPoolconnection-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.DruidDataSourcedriver-class-name: dm.jdbc.driver.DmDriverurl: jdbc:dm://localhost:5236/DB_NAME?schema=SYSDBAusername: SYSDBApassword: SYSDBAdruid:# 连接池核心配置initial-size: 5min-idle: 5max-active: 20max-wait: 60000# 监控配置filter:stat:enabled: truelog-slow-sql: trueslow-sql-millis: 2000web-stat-filter:enabled: truestat-view-servlet:enabled: trueurl-pattern: /druid/*login-username: adminlogin-password: admin123

3. 添加达梦方言配置类

@Configuration
public class DruidConfig {@Beanpublic 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 {@Autowiredprivate DataSource dataSource;@Testpublic 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: 10min-idle: 10max-wait: 3000            # 获取连接超时时间time-between-eviction-runs-millis: 60000  # 检测间隔min-evictable-idle-time-millis: 300000     # 最小空闲时间

2. 安全加固

druid:filter:wall:config:delete-allow: false   # 禁止DELETE无WHEREdrop-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: trueremove-abandoned-timeout: 300  # 5分钟未关闭连接强制回收
    
  2. 分析日志中abandoned connection警告定位代码

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/news/907024.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【MySQL】08.视图

视图就是一个由查询到的内容定义的虚拟表。它和真实的表一样&#xff0c;视图包含一系列带有名称的列和行数据。视图的数据变化会影响到基表&#xff0c;基表的数据变化也会影响到视图。 1. 基本使用 mysql> select * from user; -------------------- | id | age | name …

4 通道1250MSPS‐16bit DAC 回放板

简介 4 通道1250MSPS‐16bit DAC 回放板 是一款4 路转换速率最高为1250MSPS 的DAC 回放板&#xff0c; DAC 位数16bit&#xff1b;板卡支持触发输出/触发输入&#xff1b;DAC 采样时钟源支持内部参考时 钟、外部参考时钟、外部采样时钟三种方式&#xff0c;可通过SPI 总线实现时…

C/C++---类型转换运算符

在C中&#xff0c;类型转换运算符&#xff08;Type Conversion Operator&#xff09;允许类对象在需要时自动转换为其他类型。这是一种特殊的成员函数&#xff0c;能够增强类的灵活性和交互性。 1. 基本语法 类型转换运算符的声明格式为&#xff1a; operator 目标类型() co…

大模型Agent

手撕 Agent 1、功能描述 设计一个 Agent,自动选择使用以下工具回答用户的问题: 查看目录下的文件基于给定的文档回答用户问题查看与分析 Excel 文件撰写文档调用 Email 客户端发邮件2、演示用例 实验中使用三个文档演示 Agent 的能力 ./data|__2023年8月-9月销售记录.xlsx…

超临界机组协调控制系统建模项目开发笔记

超临界机组协调控制系统建模项目开发笔记 项目概述 本项目基于两篇论文的方法&#xff0c;对超临界机组协调控制系统进行数据驱动建模。主要使用LSTMTransformer混合架构&#xff0c;实现对主蒸汽压力(Pst)、分离器蒸汽焓值(hm)和机组负荷(Ne)的预测。同时&#xff0c;通过消…

mysql安全管理

数据库管理系统用于管理数据库服务器的各种数据库资源&#xff0c;MYSQL是一个支持多用户的数据库管理系统&#xff0c;实现多用户下&#xff0c;各种数据库资源的安全访问控制&#xff0c;确保数据库资源安全访问成为了数据库管理系统的核心功能。MYSQL安全管理是指允许合法账…

QT中常用的类

Qt 是一个功能强大的跨平台框架&#xff0c;提供了丰富的类库来开发 GUI 和应用程序。以下是 ​​Qt 中常用的核心类​​&#xff0c;按模块分类整理&#xff1a; ​​1. GUI 和窗口管理​​ 类名用途示例场景​​QWidget​​所有 GUI 控件的基类&#xff08;按钮、窗口等&…

【Redis原理篇】五大基本数据类型的底层编码方式

上文&#xff1a;redis底层数据结构 String底层结构 一、编码方式 1.int编码 **适用范围&#xff1a;**64位整数&#xff08;long&#xff09; **实现&#xff1a;**直接将数据存储在redisObject的ptr指针位置。 内存布局&#xff1a; 2.embstr编码 **适用条件&#xf…

自动编码器 潜在空间 Autoencoders 视频截图

【双语】Autoencoders_哔哩哔哩_bilibili 【双语】Autoencoders_哔哩哔哩_bilibili

ZLG USBCANFD python UDS刷写脚本

文章目录 概述python UDS 刷写脚本UI交互界面概述 在实际工作中,有使用周立功的UDSCANFD设备,用来收发CAN数据和UDS on CAN的诊断测试或者UDS on CAN的ECU升级。上位机使用ZCANPro,软件自带ECU刷新界面,可以编辑UDS服务,加载升级文件等,能用是能用,但是仍不能满足一些特…

线程安全问题的成因

前言 大家晚上好呀~~ 今天学习了线程不安全问题的成因。线程安全问题是十分重要的知识点&#xff0c;我想把我所学的与大家分享一波&#xff0c;希望可以帮助到有需要的人&#xff0c;同时加深自己对于线程安全问题的理解。 分析过程如下 结语 今天心情还不错~ 要坚持持续…

C++可变参数宏定义语法笔记

1. 基础语法 定义格式&#xff1a; #define MACRO_NAME(fixed_args, ...) macro_body#define LOG(fmt, ...) printf(fmt, __VA_ARGS__) LOG("Value: %d, Name: %s", 42, "Alice"); // 展开为 printf("Value: %d, Name: %s", 42, "Alice&q…

mongodb安装启动

这里写自定义目录标题 安装包下载安装后文件目录列表bin目录下 mongod 可以对mongodb 进行启动等操作 环境变量配置创建数据目录&#xff0c;日志目录启动参数配置启动 mongodbweb页面访问&#xff0c;检查服务启动是否正常可视化工具连接mongodb创建 database创建collection查…

Leetcode 3562. Maximum Profit from Trading Stocks with Discounts

Leetcode 3562. Maximum Profit from Trading Stocks with Discounts 1. 解题思路2. 代码实现 题目链接&#xff1a;3562. Maximum Profit from Trading Stocks with Discounts 1. 解题思路 这一题没有搞定&#xff0c;思路上整体走偏了&#xff0c;看了一下别人的解答&…

【Redis】第2节|Redis基本数据类型

一、基础数据结构 1. String&#xff08;字符串&#xff09; 特点&#xff1a;二进制安全&#xff0c;支持字符串、数值存储&#xff0c;原子性操作。核心操作&#xff1a; SET key value # 存储键值对 GET key # 获取值 INCR key # 数值…

用matlab提取abaqus odb文件中的节点信息

在MATLAB中提取Abaqus ODB文件中的节点信息&#xff0c;可以通过以下几种方法实现&#xff1a; 方法1&#xff1a;使用MATLAB的ABAQUS Interface工具箱 https://wenku.csdn.net/answer/77axwtqnys 可以参考这个 MATLAB的ABAQUS Interface工具箱提供了直接读取ODB文件的功能。…

【Java】异常处理

1.异常的概念 在程序运行时&#xff0c;打断正常程序流程的不正常情况分两类: 1.错误(Error)&#xff1a;应用程序无法捕获的严重问题(自己无法处理) 例&#xff1a; 虚拟机相关的问题&#xff0c;如虚拟机崩溃、动态链接失败、低层资源错误等 总是不受编译器检查的&#xff0…

Linux(Centos 7.6)命令详解:tar

1.命令作用 命令tar将许多文件一起保存到单个磁带或磁盘存档中&#xff0c;并且可以从存档中恢复单个文件(GNU tar saves many files together into a single tape or disk archive, and can restore individual files from the archive.)。 2.命令语法 Usage: tar [OPTION.…

企业网络综合实训

企业网络综合实训 任务描述&#xff1a; 公司的中心机房、办公区一和办公区二位于同一园区。要求各大楼之间要互通&#xff0c;并且均能访问Internet&#xff1b;同时公司业务需要对外拓展&#xff0c;需要在Internet数据中心机房部署一台对外提供DNS和Web站点服务的服务器。…

8天Python从入门到精通【itheima】-41~44

目录 41节-while循环的嵌套应用 1.学习目标 2.while循环的伪代码和生活情境中的应用 3.图片应用的代码案例 4.代码实例【Patrick自己亲手写的】&#xff1a; 5.whlie嵌套循环的注意点 6.小节总结 42节-while循环的嵌套案例-九九乘法表 1.补充知识-print的不换行 2.补充…