【问题标题】:Spring boot "Hikari Pool Shutdown" early errorSpring boot“Hikari Pool Shutdown”早期错误
【发布时间】:2018-11-12 09:32:12
【问题描述】:

错误:

2018-11-12 18:25:31.221  INFO 3028 --- [       Thread-3] 
com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown initiated...

2018-11-12 18:25:31.223  INFO 3028 --- [       Thread-3] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown completed.

为什么会出现这个错误?

我该如何解决?

【问题讨论】:

  • 添加datasource和hikari版本的配置
  • 添加调试级别日志记录。 Hikari 有非常好的调试日志。也许这会给你提示什么是错的。
  • 您找到解决方案了吗?您还需要这方面的帮助吗?

标签: spring-boot spring-jdbc hikaricp


【解决方案1】:

您的类路径中似乎没有任何嵌入式 Web 服务器。 尝试通过 spring-boot-starter-web 依赖添加 Tomcat

Maven pom.xml:

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

Gradle build.gradle:

implementation 'org.springframework.boot:spring-boot-starter-web'

【讨论】:

    【解决方案2】:

    我的问题是在 pom.xml 中没有包含 spring-boot-starter-web artifactId

    1 - 将下面的dependency 添加到 pom.xml 中。

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

    2 - 转到 pom.xml 右键单击​​并继续图像:

    【讨论】:

      【解决方案3】:

      在我的情况下,我正在研究一本关于 Kotlin 的书,在关于将 Spring 与 Kotlin 结合使用的章节中。我使用 Spring Initializr 设置了 gradle 项目。我能够从 IntelliJ IDEA ide 中的 gradle 选项卡进行 gradle clean 和 gradle 构建,没有任何问题。然后,我尝试使用 MyApplication.kt 中的“fun main()”*函数旁边的“run MyApplicationKt”来运行该项目。 spring boot 项目一开始可以正常启动,但在原始发布者的示例中发现 Hikari 数据源关闭,并且 spring boot 本身停止了。

      2020-11-10 22:29:46.868  INFO 19536 --- [           main] c.agiledeveloper.todo.TodoApplicationKt  : Started TodoApplicationKt in 2.819 seconds (JVM running for 3.431)
      
      2020-11-10 22:30:47.606  INFO 19536 --- [extShutdownHook] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default'
      
      2020-11-10 22:30:47.607  INFO 19536 --- [extShutdownHook] .SchemaDropperImpl$DelayedDropActionImpl : HHH000477: Starting delayed evictData of schema as part of SessionFactory shut-down'
      
      2020-11-10 22:30:47.610  INFO 19536 --- [extShutdownHook] o.s.s.concurrent.ThreadPoolTaskExecutor  : Shutting down ExecutorService 'applicationTaskExecutor'
      
      2020-11-10 22:30:47.610  INFO 19536 --- [extShutdownHook] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown initiated...
      
      2020-11-10 22:30:47.615  INFO 19536 --- [extShutdownHook] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown completed.
      

      问题是我是 Gradle 的新手,解决方法是避免上述情况,而是转到 Gradle 选项卡 > 任务 > 应用程序 > bootRun,这会在避免关机的同时运行应用程序。然后我可以使用我正在使用的 curl 命令访问我的 RESTful Web 服务运行项目。

      作为参考,为什么 curl 命令对我的 spring gradle REST 项目不起作用:Curl : connection refused

      【讨论】:

        【解决方案4】:

        通过注释掉这个依赖项解决了我的问题:

        <!--        <dependency>-->
        <!--            <groupId>org.springframework.boot</groupId>-->
        <!--            <artifactId>spring-boot-starter-tomcat</artifactId>-->
        <!--            <scope>provided</scope>-->
        <!--        </dependency>-->
        

        如果仍然遇到错误,请尝试在上面的代码中注释

        【讨论】:

          【解决方案5】:

          检查您是否有不使用的 jpa 依赖项并将其删除。还要为 tomcat 和 spring-boot-starter-web 添加依赖项

          删除

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

          如果不存在则添加

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

          【讨论】:

            【解决方案6】:

            检查你是否有&lt;dependency&gt; &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt; &lt;artifactId&gt;spring-boot-starter-tomcat&lt;/artifactId&gt; &lt;/dependency&gt; 在你的 pom.xml 中,删除它

            【讨论】: