Web应用程序似乎已启动名为[HikariPool-1管家]的线程但未能阻止它

时间:2017-01-24 18:14:10

标签: tomcat8 hikaricp

我正在尝试在Tomcat 8.5中使用HikariCP JNDI DataSource Factory但是当它关​​闭时我收到这些警告:

o.a.c.loader.WebappClassLoaderBase       : The web application [ROOT] appears to have started a thread named [HikariPool-1 housekeeper] 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(Unknown Source)
 java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source)
 java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source)
 java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source)
 java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source)
 java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
 java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
 java.lang.Thread.run(Unknown Source)

我的Hiraki配置是在JNDI DataSource Factory(Tomcat等)document之后设置的,如下所示:

<Resource name="******" auth="Container"
      factory="com.zaxxer.hikari.HikariJNDIFactory"
      type="javax.sql.DataSource"
      minimumIdle="5" 
      maximumPoolSize="10"
      connectionTimeout="300000"
      driverClassName="org.postgresql.Driver"
      jdbcUrl="jdbc:postgresql://******"
      dataSource.implicitCachingEnabled="true" 
      dataSource.user="******"
      dataSource.password="******" />

我发现了link,但它并没有帮助,因为我在Tomcat中使用Hiraki作为资源。

我正在使用Tomcat 8.5 HikariCP 2.5.1

有任何帮助吗?感谢。

5 个答案:

答案 0 :(得分:2)

您需要添加的内容是资源的末尾:

           closeMethod="close"/>

答案 1 :(得分:1)

我遇到了完全相同的问题,至少错误信息是相同的。 错误消息显示Hikari-Pool配置存在问题但实际上您的Tomcat无法启动。 一个简单的解决方案是检查应用程序是否存在任何运行时错误。 就我而言,在我的Rest-Controller中,我声明了相同的HTTP-Method,它具有相同的URI端点,但具有不同的方法名称。 因此,它不是编译时错误,但在构建Tomcat期间它失败,导致HikariPool抛出错误消息。

希望它有所帮助。如果这不起作用做评论,也许我可以提供帮助。

答案 2 :(得分:1)

就我而言,我从 org.springframework.boot:spring-boot-devtools 中删除了 gradle.build,它与 SpringBoot "2.3.7" 配合使用

似乎 SpringBoot 版本“2.2”没有受到影响。

我不知道它会这样做

答案 3 :(得分:0)

在我的情况下,我在字符串类型上使用@Enumerated注释。

@Enumerated(EnumType.STRING)
@Column(nullable = false, name = "transaction_type")
private String transactionType;

我在使用纯字符串时删除了@Enumerated行,并且它起作用了。

答案 4 :(得分:0)

就我而言,出现这种症状的原因是:

  • 我更改了仍在发展中的飞行路线脚本(通过从飞行路线历史表中删除其记录以确保它再次运行),
  • 但忘记删除我的脚本在之前的测试中创建的表,它将再次创建。

一旦我:问题就消失了:

  • 不仅从飞行历史表中删除了脚本记录(以便脚本再次运行)
  • 但也将数据库架构恢复到脚本前状态