在使用 Tomcat 服務器時,如果大約 10 個小時沒有訪問應用,通過 SSH 連接操作時會拋出異常。用戶已在 MySQL 配置中設置了長連接參數:
wait_timeout=2147483
interactive_timeout=2147483
但問題依然存在,錯誤截圖如下:

這類問題通常不是數據庫配置的問題,而是連接池管理導致的。常見原因包括:
以常用的 Druid 連接池為例,需添加以下關鍵配置:
# 驗證連接有效性
validationQuery=SELECT 1
testWhileIdle=true
testOnBorrow=false
testOnReturn=false
# 空閒連接回收設置
timeBetweenEvictionRunsMillis=60000
minEvictableIdleTimeMillis=300000
若在 context.xml 中配置 JNDI 數據源:
<Resource name="jdbc/myDB"
auth="Container"
type="javax.sql.DataSource"
factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
testWhileIdle="true"
validationQuery="SELECT 1"
validationInterval="30000"
timeBetweenEvictionRunsMillis="30000"
minEvictableIdleTimeMillis="300000"
maxActive="100"
minIdle="10"
maxWait="10000"
username="root"
password="password"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/mydb?autoReconnect=true"/>
try-with-resources 或 finally 塊關閉連接testWhileIdle=true 和合理的 validationQuerymaxWait、minEvictableIdleTimeMillis 需小於數據庫的 wait_timeout通過上述配置,可有效解決長時間無訪問後連接失效的問題,保證應用的高可用性。