记一次突然springboot中JDBC连接超时问题

问题:项目中是使用Hikari连接池

原配置:

    hikari:
      auto-commit: true
      minimum-idle: 2
      maximum-pool-size: 5
      pool-name: DataSourceHikariCP
      connection-timeout: 5000
      idle-timeout: 600000
      max-lifetime: 7200000
      connection-test-query: SELECT 1  
解决方法:刚开始开发的时候没有问题,后来服务越来越多,服务之间调用的也多了,然后问题就出来了,连接池和连接数设置太小,后来干脆都改了:
    hikari:
      auto-commit: true
      minimum-idle: 10
      maximum-pool-size: 25
      pool-name: DataSourceHikariCP
      connection-timeout: 30000
      idle-timeout: 30000
      max-lifetime: 1800000
      connection-test-query: SELECT 1  
### Spring Boot 应用中 MySQL 数据库连接超时解决方案 在处理 Spring Boot 应用中的 MySQL 连接超时时,可以采取多种措施来优化配置并解决问题。 #### 配置数据源属性 调整 `application.properties` 或者 `application.yml` 文件中的数据源属性能够有效缓解连接超时现象。对于 HikariCP(默认的数据源),以下是几个重要的参数设置: - **最大活跃连接数 (`maximumPoolSize`)** 设置合理的最大连接数量有助于防止过多请求耗尽资源。通常建议根据应用程序的工作负载进行适当调整[^1]。 - **最小闲置连接数 (`minimumIdle`)** 维持一定量的空闲连接可以在高峰期快速响应新的数据库操作需求。 - **连接超时时间 (`connectionTimeout`)** 定义获取连接的最大等待毫秒数。如果超过这个时限仍未获得可用连接,则抛出异常。增加此值可能暂时掩盖问题所在,但并非长久之计;更应该关注为何频繁发生超时事件。 ```properties spring.datasource.hikari.maximum-pool-size=20 spring.datasource.hikari.minimum-idle=5 spring.datasource.hikari.connection-timeout=30000 ``` #### 使用 PooledConnection 获取实际物理连接 有时为了诊断或特殊用途,开发者可能会尝试通过 JDBC API 的方式直接访问底层的实际物理连接对象。然而,在大多数情况下并不推荐这样做,因为这会绕过连接池管理机制,可能导致不可预见的行为和性能下降。正确做法应当依赖于框架所提供的接口来进行数据库交互。 ```java // 不推荐的做法 Connection con = dataSource.getConnection(); Connection actual = ((javax.sql.PooledConnection) con).getConnection(); // 推荐的方式是仅使用由DataSource提供的标准JDBC Connection实例 try (Connection conn = dataSource.getConnection()) { // 执行SQL语句... } ``` #### 修改表结构字段类型 当遇到权限认证失败等问题时,检查 SQL 创建脚本以及相应的 DDL 可能会有帮助。例如,将某些列的数据类型从 `DATETIME` 改为 `TIMESTAMP` 并移除不必要的默认值定义可以帮助解决特定场景下的兼容性和安全问题[^2]。 ```sql ALTER TABLE your_table MODIFY COLUMN created_at TIMESTAMP; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值