开发环境HikariPool连接超时异常求助(本地运行正常)
HikariPool连接超时异常(仅开发环境间歇性出现)
异常信息
仅在开发服务器间歇性触发以下异常,本地运行完全正常:
HikariPool-1 - Connection is not available, request timed out after 30004ms.
业务需求与实现逻辑
需求
- 将源表数据导入目标表
- 迁移过程中发生异常时,回滚主事务并将异常信息独立提交到日志表
实现方式
- 给执行数据迁移的
DemoService类添加@Transactional注解 - 通过
@Aspect实现@AfterThrowing切面,调用带有@Transactional(propagation = Propagation.REQUIRES_NEW)注解的LoggingService记录日志,保证日志事务独立提交
问题现象
开发环境触发异常进入日志记录逻辑时,Hikari连接池无法获取新连接,超时抛出上述异常。从日志可确认:
- 连接池配置的
maximum-pool-size为3,但实际仅能创建1个连接 - 后续尝试创建连接时抛出
NullPointerException,无法填充连接池 - 异常发生时Oracle仅存在1个会话,正常运行时为3个,说明连接池未成功创建足够连接
已排查内容
- 确认Oracle数据库的
IDLE_TIME远大于Hikari的maxLifetime,CONNECT_TIME无限制 - 排除Spring Bean懒加载的影响,验证JdbcTemplate场景下问题仍存在
- 本地与开发环境使用完全相同的数据库配置
疑问
- 日志中频繁出现的
HikariPool-1 - Cannot acquire connection from data source是否与当前问题相关?是否由网络不稳定导致? - 日志中连接池状态从
waiting=1变为waiting=0,是否是因为连接请求超时未获取到连接? - 配置
maximum-pool-size为3却无法创建足够连接,是否与Hikari的连接创建线程有关?
已准备好包含DDL语句与开发环境日志的示例代码,恳请帮忙分析问题原因。
内容的提问来源于stack exchange,提问作者koreanDev
相关产品推荐
相关产品推荐

