Spring Boot - Hikari 管家线程在升级后关闭时无法停止

问题描述 投票:0回答:0

我们最近从 Spring Boot 2.5.14 升级到 2.7.8.

升级后,我们现在在关闭应用程序时出现错误:

2023-02-27 11:09:40.473  WARN [on(2)-127.0.0.1] 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(LockSupport.java:215)
 java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2078)
 java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1093)
 java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:809)
 java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
 java.lang.Thread.run(Thread.java:750)

pom.xml 中的一些相关信息

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.8</version>
        <relativePath /> <!-- lookup parent from repository -->
    </parent>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>com.microsoft.sqlserver</groupId>
            <artifactId>mssql-jdbc</artifactId>
            <scope>runtime</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

我们为 JPA 做了非常少的配置。

我们在属性文件中指定spring数据源属性:

spring.datasource.url=jdbc:sqlserver...
spring.datasource.username=...
spring.datasource.password=..
spring.jpa.show-sql=false
spring.jpa.hibernate.ddl-auto=none

我们像这样编码我们的存储库

import org.springframework.data.jpa.repository.JpaRepository;

public interface OurRepository extends JpaRepository<OurEntity, String> {
    
    List<OurEntity> findByProperty(String property);
}

我在很多地方搜索了这个错误,我找到的唯一建议是在bean配置上添加destroyMethod="close"。然而,我们没有显式定义一个 DataSource bean,我们依赖于 Spring Boot 的实现,我相信它应该适当地结束。

知道为什么我们在关闭应用程序时突然收到此错误吗? 关于该错误的危害程度有何评论? 有什么缓解的建议吗?

spring-boot spring-data-jpa hikaricp
© www.soinside.com 2019 - 2024. All rights reserved.