You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R2DBC连接池未复用MySQL连接?Spring应用异常问题咨询

R2DBC MySQL连接复用异常:连接ID暴涨、CPU占用高问题分析

核心结论

这种用完连接就关闭、不回池复用的情况,基本都是连接池配置错误或使用方式不当,而非R2DBC的有意设计——R2DBC本身支持连接池复用,官方提供的r2dbc-pool就是专门做连接池管理的组件,正常配置下会自动复用连接。

排查步骤

1. 确认连接池依赖是否正确引入

别只引入MySQL的R2DBC驱动,必须搭配连接池依赖,否则每次数据库操作都会新建连接:

<!-- Maven 依赖示例 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-r2dbc</artifactId>
</dependency>
<dependency>
    <groupId>io.r2dbc</groupId>
    <artifactId>r2dbc-pool</artifactId>
</dependency>
<dependency>
    <groupId>dev.miku</groupId>
    <artifactId>r2dbc-mysql</artifactId>
</dependency>

如果缺少r2dbc-pool,Spring会默认使用非池化连接,直接导致连接ID暴涨。

2. 检查连接池配置是否生效

查看application.yml或application.properties,确保连接池已开启:

spring:
  r2dbc:
    url: r2dbc:mysql://localhost:3306/your_db
    username: root
    password: xxx
    pool:
      enabled: true  # 关键配置,必须设为true
      initial-size: 5
      max-size: 20
      max-idle-time: 30m

若未开启enabled: true,即使加了连接池依赖,依然会使用非池化连接,频繁创建销毁。

3. 排查代码中的连接使用逻辑

  • 避免手动创建ConnectionFactory获取连接后调用Connection.close()——连接池会自动管理连接回收,手动关闭会直接销毁连接而非放回池内。
  • 确保所有数据库操作都通过Spring Data R2DBC的Repository或DatabaseClient执行,不要自己实现连接管理逻辑。
  • 检查事务配置:比如事务超时时间过短、事务未正常提交/回滚,都可能导致连接被异常销毁。

4. 尝试升级MySQL R2DBC驱动

部分旧版本的r2dbc-mysql驱动存在连接池适配bug,可能导致连接无法正常回池,建议升级到最新稳定版(如0.8.x系列,适配MySQL 8.0+)。

关于“unauthenticated user”的说明

SHOW PROCESSLIST中出现的该状态,是MySQL正在处理新连接的认证流程,频繁出现直接对应连接未被复用的问题——正常复用连接的场景下,不会产生大量这类进程。

内容的提问来源于stack exchange,提问作者youngminz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 22:57:19