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

Tomcat连接池间歇性抛出Unexpected end of data异常求助

问题描述

Spring Boot应用配置了Tomcat连接池,application.properties配置如下:

// db user name, password, url here...
spring.datasource.tomcat.initial-size=15
spring.datasource.tomcat.max-wait=20000
spring.datasource.tomcat.max-active=100
spring.datasource.tomcat.max-idle=15
spring.datasource.tomcat.min-idle=8
spring.datasource.tomcat.default-auto-commit=true
spring.datasource.type=org.apache.tomcat.jdbc.pool.DataSource

初始运行正常,但每隔数小时执行JDBC代码时会抛出Unexpected end of data异常,部分场景表现为SQLException。重启Tomcat后恢复正常,但一段时间后问题复现。

连接代码采用try-with-resources语法:

try
(
        final Connection connection = dataSource.getConnection();
        final PreparedStatement statement = connection.prepareStatement(SQL_TO_RUN_HERE);
)
{
    // 业务逻辑代码
}

其中dataSource为注入的连接池实例。不使用连接池,直接调用DriverManager.getConnection(...)则无此问题。

补充错误细节:

  • SQL状态码:08007
  • 详细信息:[FileMaker][FileMaker JDBC] Unexpected end of data.
  • 错误码:27026
  • 报错行:connection.prepareStatement(SQL)
问题分析与解决方案

问题核心是连接池中的连接已被FileMaker服务器主动断开,但Tomcat连接池未检测到连接失效,仍将无效连接分配给应用使用。直接用DriverManager每次新建连接,因此不会出现该问题。

需给Tomcat连接池添加连接有效性检测配置,确保分配的连接均可用:

在application.properties中追加以下配置:

# 用于检测连接有效性的SQL(需替换为FileMaker支持的简单查询,比如查询任意存在的表)
spring.datasource.tomcat.validation-query=SELECT 1 FROM your_existing_table
# 获取连接时检测有效性
spring.datasource.tomcat.test-on-borrow=true
# 归还连接时不检测(可根据需求调整)
spring.datasource.tomcat.test-on-return=false
# 连接空闲时定时检测有效性
spring.datasource.tomcat.test-while-idle=true
# 空闲检测的间隔时间(单位:毫秒,此处为5分钟)
spring.datasource.tomcat.time-between-eviction-runs-millis=300000
# 连接空闲超过该时长后被纳入检测范围(单位:毫秒,此处为30分钟)
spring.datasource.tomcat.min-evictable-idle-time-millis=1800000

配置说明:

  • validation-query:必须是FileMaker支持的合法SQL,比如查询一张存在的表的简单语句,用于验证连接是否存活。
  • test-on-borrow:获取连接前强制检测,确保拿到的是可用连接,能直接解决当前问题,仅会带来微小性能损耗。
  • test-while-idle+配套参数:定时清理池中失效连接,提前淘汰即将被服务器断开的空闲连接,避免后续分配无效连接。

另外建议检查FileMaker服务器的连接超时设置,确保连接池的min-evictable-idle-time-millis小于服务器端的连接超时时间,避免服务器先断开连接但连接池未及时清理的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 00:27:11