【问题标题】:The web application appears to have started a thread named [HikariPool-1 housekeeper] but has failed to stop itWeb 应用程序似乎启动了一个名为 [HikariPool-1 管家] 的线程,但未能停止它
【发布时间】:2017-06-09 17:11:49
【问题描述】:

我正在尝试在 Tomcat 8.5 中使用 HikariCP JNDI 数据源工厂,但是当它关​​闭时,我收到以下警告:

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 数据源工厂(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

有什么帮助吗?谢谢。

【问题讨论】:

    标签: tomcat8 hikaricp


    【解决方案1】:

    您需要在资源末尾添加以下内容:

               closeMethod="close"/>
    

    【讨论】:

      【解决方案2】:

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

      希望对您有所帮助。如果这不起作用,请发表评论,也许我可以提供帮助。

      【讨论】:

      • 就我而言,这是在 FilterRegistrationBean.addUrlPatterns 方法中定义的错误路径。我错误地使用了“-/api/path”而不是“/api/path”。当我删除那个“-”时,它起作用了。
      【解决方案3】:

      就我而言,我在字符串类型上有@Enumerated 注释。

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

      我删除了@Enumerated 行,因为我使用的是纯字符串并且它工作正常。

      【讨论】:

        【解决方案4】:

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

        似乎 SpringBoot 版本“2.2”不受影响。

        我不知道它会这样做

        【讨论】:

          【解决方案5】:

          就我而言,这种症状是因为:

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

          一旦我发现问题就消失了:

          • 不仅从 flyway 历史表中删除了脚本记录(以便脚本再次运行)
          • 但也将 DB 模式恢复到其预脚本状态

          【讨论】:

            猜你喜欢
            • 2017-11-10
            • 2011-08-19
            • 2017-12-26
            • 1970-01-01
            • 2014-10-31
            • 2017-12-07
            • 2014-09-27
            • 2014-09-11
            • 1970-01-01
            相关资源
            最近更新 更多