專案中需連接 MySQL,推薦使用數據庫連接池。對比發現:
NewProxyConnection 未實現 JDBC 4.0 isValid(int timeout) 方法,導致連接池無法可靠驗證連接有效性,易出現「空閒連接斷開」問題。Connection 實現類已實現isValid(int timeout),支援標準連接驗證機制。testConnectionOnCheckin 或 idleConnectionTestPeriod,驗證查詢可能失效或拋出異常。isValid() 進行高效、標準化的連接健康檢查。com.mysql.cj.jdbc.MysqlDataSource(MySQL 8.0+)或 com.mysql.jdbc.jdbc2.optional.MysqlDataSource(5.x)。preferredTestQuery(如 SELECT 1)並關閉 testConnectionOnCheckin,但不如原生 isValid() 可靠。HikariDataSource ds = new HikariDataSource();
ds.setDataSourceClassName("com.mysql.cj.jdbc.MysqlDataSource");
ds.addDataSourceProperty("serverName", "localhost");
ds.addDataSourceProperty("port", 3306);
ds.addDataSourceProperty("databaseName", "mydb");
ds.addDataSourceProperty("user", "user");
ds.addDataSourceProperty("password", "pass");
ds.setConnectionTestQuery("SELECT 1"); // 兼容舊版,新版可依賴 isValid()
ds.setMaximumPoolSize(20);
MysqlDataSource 實現標準 isValid(),配合現代連接池提供更穩健的連接驗證,建議替換 c3p0。