使用DBCP时发生AbstractMethodError异常

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用DBCP时发生AbstractMethodError异常相关的知识,希望对你有一定的参考价值。

使用DBCP时发生AbstractMethodError异常,错误描述:

Exception in thread "main" java.lang.AbstractMethodError: com.mysql.jdbc.Connection.isValid(I)Z
 at org.apache.commons.dbcp2.DelegatingConnection.isValid(DelegatingConnection.java:914)
 at org.apache.commons.dbcp2.PoolableConnection.validate(PoolableConnection.java:283)
 at org.apache.commons.dbcp2.PoolableConnectionFactory.validateConnection(PoolableConnectionFactory.java:357)
 at org.apache.commons.dbcp2.BasicDataSource.validateConnectionFactory(BasicDataSource.java:2304)
 at org.apache.commons.dbcp2.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:2287)
 at org.apache.commons.dbcp2.BasicDataSource.createDataSource(BasicDataSource.java:2038)
 at org.apache.commons.dbcp2.BasicDataSource.getConnection(BasicDataSource.java:1533)
 at DBCP.main(DBCP.java:23)

解决方案:
    mysql-connector 版本为 5.0.4 ,那么对应的 dbcp 和 pool 版本应该为 1.4 和 1.6 。
    5.0.4 不应该使用 2.0 及以上版本的 dbcp 和 pool。因为 在 dbcp 中 org.apache.commons.dbcp2.DelegatingConnection 有如下代码:
try {
    return _conn.isValid(timeout);
 }
 catch (SQLException e) {
    handleException(e);
    return false;
 }

    上述代码中 isVaild 在 com.mysql.jdbc.Connection (5.0.4 ) 中并未实现上述方法,因此将会抛出抽象方法错误。
    如果需要使用 dbcp 2.0 ,那么 mysql-connector 必须使用 5.1.3 版本。

总结:出现这样的问题就应该想到是连接驱动的问题,更换一下驱动版本尝试一下即可!

以上是关于使用DBCP时发生AbstractMethodError异常的主要内容,如果未能解决你的问题,请参考以下文章

mysql连接超时后无法从apache DBCP连接池获取连接

异常记录与处理-Cannot find class [org.apache.commons.dbcp.BasicDataSource]

使用 Spring-Boot 启动 Tomcat 上下文时出错:java.lang.ClassNotFoundException: org.apache.tomcat.dbcp.dbcp.BasicD

DBCP2配置详细说明(中文翻译)

登录 DBCP

尝试使用 sbt 导入 dbcp2 和 postgres 库时出错 [重复]