tomcat 8 中使用JTDS 报 java.lang.AbstractMethodError 异常的解决办法

由于之前使用的 Tomcat版本为6.0.41,版本较低,漏洞太多,安全检测总被扫描出来,所以升级到 Tomcat8.5.29,用的SQLSERVER2008数据库,一连接总报错:

Caused by: java.lang.AbstractMethodError
        at org.apache.tomcat.dbcp.dbcp2.DelegatingConnection.isValid(DelegatingConnection.java:924)
        at org.apache.tomcat.dbcp.dbcp2.PoolableConnection.validate(PoolableConnection.java:282)
        at org.apache.tomcat.dbcp.dbcp2.PoolableConnectionFactory.validateConnection(PoolableConnectionFactory.java:364)
        at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.validateConnectionFactory(BasicDataSource.java:2355)
        at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:2338)
        at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createDataSource(BasicDataSource.java:2067)
        at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.getConnection(BasicDataSource.java:1543)

网上找了半天解决办法都没有找到,最后终于找到如下这篇文章解决了问题,非常感谢博主的分享!

原因就是

后经过网上查找相关资料显示tomcat 7 与tomcat 8 的DBCP (数据库连接池) 使用的规范不一样,tomcat 7及之前的版本用的是DBCP1,而tomcat 8 使用的是DBCP2 规范. 而DBCP2 中将测试数据库连接中的 isValid()接口实现换成了 validationQuery()
因此我们如果想在tomcat 8 中使用JTDS 就必须在 Resource 加上一条 validationQuery
name="jdbc/clgl" type="javax.sql.DataSource"
driverClassName="net.sourceforge.jtds.jdbc.Driver"
maxIdle="30"
maxWait="5000"
username="sa"
password="sa"
url="jdbc:jtds:sqlserver://localhost:1433/clgl;charset=gbk;SelectMethod=CURSOR"
maxActive="150"

validationQuery="select 1"/>

此外,还需要把tomcat\lib 下的 jtds-1.2.jar 换成 jtds-1.3.jar,否则会报错;

转自: http://mzjwx.blog.163.com/blog/static/7167883320154561547275/


你可能感兴趣的:(数据库,Server/服务器/中间件)