如何解决这个异常:
Exception in thread "main" java.lang.AbstractMethodError: com.mysql.jdbc.Connection.isValid(I)Z
at org.apache.commons.dbcp2.DelegatingConnection.isValid(DelegatingConnection.java:914)
...
我读到这个错误与库/ jdk 有关,但我找不到解决它的好方法。我需要你的帮助。谢谢!
这意味着你的mysql jdbc驱动程序没有实现jre 6中添加的jdbc方法,例如isValid。
如果您提供验证查询,则可以避免升级驱动程序。
我将 JDBC 驱动程序 jar 文件升级到 mysql-connector-java-6.0.2 并解决了这个问题。
结合多个答案并扩展信息,以便所有信息都集中在一处......
正如 @BrettOkken 提到的,JDK 1.6 在 Connection 上添加了
isValid
方法,因此最好的选择是找到更新版本的驱动程序。
扩展@mhvelplund的答案......
如果您说服 Tomcat 的 dbcp2 不调用
isValid
方法,则可以避免升级 JDBC 驱动程序。您可以通过在 validationQuery
文件(放入 Tomcat 的 validationQueryTimeout
中)的 maxConnLifetimeMillis
定义中指定 Resource
(也可能是 context.xml
和 /conf/Catalina/localhost/{myappname}.xml
)来完成此操作。
<Resource name="jdbc/ajx"
auth="Container" type="javax.sql.DataSource"
maxTotal="25" maxIdle="30" maxWaitMillis="10000"
maxConnLifetimeMillis="300000"
validationQuery="SELECT CURRENT_TIME()"
validationQueryTimeout="1"
driverClassName="{...}"
url="jdbc:{...}"/>