我们最近从 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 的实现,我相信它应该适当地结束。
知道为什么我们在关闭应用程序时突然收到此错误吗? 关于该错误的危害程度有何评论? 有什么缓解的建议吗?