我在Tomcat9.0.7上使用JNDI + HikariCP,配置如下:
<Resource name="jdbc/mydb" auth="Container"
factory="com.zaxxer.hikari.HikariJNDIFactory"
type="javax.sql.DataSource"
minimumIdle="5"
maximumPoolSize="20"
connectionTimeout="300000"
dataSourceClassName="com.microsoft.sqlserver.jdbc.SQLServerDataSource"
dataSource.url="jdbc:sqlserver://server:1433;databaseName=mydb"
dataSource.user="fantomas"
dataSource.password="somepassword"
closeMethod="close"
/>当我在没有部署任何WAR的情况下运行tomcat (只是标准安装,仅此而已)时,我在Catalina日志中有以下警告:
09-May-2018 10:15:16.971 WARNING [main] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads The web application [host-manager] appears to have started a thread named [mssql-jdbc-TimeoutTimer-1] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread:
sun.misc.Unsafe.park(Native Method)
java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215)
java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:460)
java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:362)
java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:941)
java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1073)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
java.lang.Thread.run(Thread.java:748)出了什么问题,为什么会漏水?我怎么才能修好它?
Tomcat安装的./lib中的更新-1自定义库是:
ms-sql-6.4.0.jre8.jar
slf4j-api-1.7.25.jar
HikariCP-2.7.8.jar 更新-2与Hikari3.1.0和Tomcat9.0.8的相同问题
发布于 2018-05-24 10:20:26
所讨论的线程()属于MSSQL驱动程序。当您使用HikariCP (而不是Tomcat )时,它就会显示出来,因为为了可靠性,HikariCP恰当地使用JDBC。
这是MSSQL驱动程序在这里搜索‘mssql TimeoutTimer’中的一个已知问题。
似乎计时器是由HikariCP对Connection.isValid()的MSSQL驱动程序实现的调用启动的。因此,您可以通过设置connectionTestQuery来避免这个问题,这将禁用isValid()的使用。
https://stackoverflow.com/questions/50248823
复制相似问题