问题描述
感谢您提出改进问题的建议。
我正在开发一个带有 jdk1.8.0_181 并在 apache-tomcat-8.5.34 上运行的全栈应用程序。根据项目要求我有jtds-1.3.1。出于某种原因,我从 jtdsConnection.class 中的 isValid() 方法收到运行时异常。因为我在创建连接时已经使用了验证 Query="Select 1"。我很困惑为什么这个错误首先仍然存在。为了更好地理解这里是运行时异常-
线程“Tomcat JDBC Pool Cleaner[1694819250:1627477239682]”java.lang.AbstractMethodError 中的异常 在 net.sourceforge.jtds.jdbc.jtdsConnection.isValid(jtdsConnection.java:2833) 在 org.apache.tomcat.jdbc.pool.PooledConnection.validate(PooledConnection.java:516) 在 org.apache.tomcat.jdbc.pool.PooledConnection.validate(PooledConnection.java:454) 在 org.apache.tomcat.jdbc.pool.ConnectionPool.testAllIdle(ConnectionPool.java:1084) 在 org.apache.tomcat.jdbc.pool.ConnectionPool$PoolCleaner.run(ConnectionPool.java:1473) 在 java.util.TimerThread.mainLoop(Timer.java:555) 在 java.util.TimerThread.run(Timer.java:505)
此外,这是我的上下文文件-
<Resource name="jdbc/xxxx" auth="Container" driverClassName="net.sourceforge.jtds.jdbc.Driver" factory="org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory" maxTotal="100" maxIdle="30" maxWaitMillis="10000" username="xxxxxx" password="xxxxx" testOnBorrow="true" testOnReturn="true" testWhileIdle="true" type="javax.sql.DataSource" url="jdbc:jtds:sqlserver:xxxxxxx;sendStringParametersAsUnicode=false" validationQuery="SELECT 1" />
解决方法
这是因为 DBCP Jar 问题。确保您应该拥有与 Tomcat 8 兼容的 jar。
Tomcat 8 支持 JDBC 连接池,我使用的是 DBCP 连接池。因此,我需要使用正确的 DBCP.jar。可以从以下链接找到兼容的 jar- http://tomcat.apache.org/tomcat-9.0-doc/jndi-datasource-examples-howto.html