网络应用似乎启动了一个名为[HikariPool-1 housekeeper]的线程,但未能停止它。

20

我正在尝试在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 DataSource Factory (Tomcat等) 文档设置的,类似于这样:

<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="******" />

我找到了这个链接,但它并没有帮助我,因为我正在将Hiraki作为Tomcat内的资源使用。

我正在使用Tomcat 8.5 HikariCP 2.5.1

有人能帮忙吗?谢谢。

8个回答

10
我曾经遇到了相同的问题,至少错误信息是相同的。错误提示说Hikari-Pool配置存在问题,但实际上是你的Tomcat启动失败了。一个简单的解决方案是检查你的应用程序是否有任何运行时错误。在我的情况下,在我的Rest-Controller中,我声明了相同的HTTP方法和相同的URI端点,但使用了不同的方法名。因此,这不是编译时错误,而是在构建Tomcat时出现了问题,导致HikariPool抛出错误消息。
希望这可以帮到你。如果这不起作用,请留言,也许我可以帮忙。

在我的情况下,是在FilterRegistrationBean.addUrlPatterns方法中定义了错误的路径。我错误地将“-/api/path”写成了“/api/path”。当我去掉那个“-”时,它就正常工作了。 - Hareendra Chamara Philips
谢谢。这个问题的原因是一样的...复制粘贴的副作用 :) - Manticore
在我的情况下,application.properties 文件中缺少一个属性。 - IKo

3
您只需要在您的资源末尾添加以下内容即可:
           closeMethod="close"/>

1
在我的情况下,我从gradle.build中删除了org.springframework.boot:spring-boot-devtools,并且它可以与SpringBoot "2.3.7"一起使用。
似乎SpringBoot版本“2.2”没有受到影响。
我不知道它是如何做到的。

1
在我的情况下,我在字符串类型上使用了@Enumerated注释。
@Enumerated(EnumType.STRING)
@Column(nullable = false, name = "transaction_type")
private String transactionType;

我删除了@Enumerated这一行,因为我正在使用普通字符串,并且它起作用了。


0
在我的情况下,这个症状是由于以下原因引起的:
  • 我修改了正在演变的Flyway脚本(通过从Flyway历史记录表中删除其记录确保它可以再次运行),
  • 但是忘记了删除我的脚本在之前测试中创建的表格,而且它将再次创建。
一旦我执行以下操作,问题就消失了:
  • 不仅从Flyway历史记录表中删除脚本记录(以便脚本可以再次运行)
  • 还将DB模式恢复到其先前的状态

0
在我的情况下,我没有为一个实体类添加@Id注解。这就是问题的原因。

0

0
我刚刚在build.gradle中对'org.springframework.boot:spring-boot-starter-data-jpa'依赖进行了注释,并加载了gradle更改。加载后,我取消了注释并再次加载,结果成功了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接