錯誤堆疊:java.lang.AbstractMethodError: com.mysql.jdbc.Connection.isValid(I)Z at org.apache.commons.dbcp2.DelegatingConnection.isValid...
**根因:MySQL Connector/J 版本與 DBCP/Pool 版本不匹配,導致 JDBC 4.0+ 引入的 isValid(int timeout) 介面方法在驅動中未實現。**
| MySQL Connector/J | DBCP 版本 | Pool 版本 | 說明 |
|---|---|---|---|
| 5.0.x (舊) | 1.4 | 1.6 | JDBC 3.0,**無 isValid 方法**,**不可用 DBCP 2.x** |
| 5.1.3+ | 2.0+ (dbcp2) | 2.0+ (pool2) | JDBC 4.0,**實現 isValid**,**必須用 DBCP 2.x** |
| 8.0.x | 2.7+ / HikariCP | 2.7+ / HikariCP | 推薦直接升級 HikariCP (Spring Boot 2.x 默認) |
mysql
mysql-connector-java
5.0.4
org.apache.commons
commons-dbcp2
2.1.1
org.apache.commons
commons-pool2
2.4.2
DBCP 2.x 內部調用 conn.isValid(timeout) (JDBC 4.0 新增),但 mysql-connector 5.0.4 僅實現 JDBC 3.0,**拋出 AbstractMethodError**。
commons-dbcp
commons-dbcp
1.4
commons-pool
commons-pool
1.6
mysql
mysql-connector-java
5.1.49
spring.datasource.hikari.maximum-pool-size=20
spring.datasource.hikari.minimum-idle=5
spring.datasource.hikari.connection-timeout=30000
spring.datasource.hikari.idle-timeout=600000
spring.datasource.hikari.max-lifetime=1800000
spring.datasource.hikari.connection-test-query=SELECT 1
AbstractMethodError。一句話總結: **Connector/J 5.0.x 必配 DBCP 1.4/Pool 1.6;5.1.3+ 必配 DBCP 2.x/Pool 2.x;最佳實踐:直接上 HikariCP + Connector/J 8.0,一勞永逸。**