【问题标题】:Spring boot REST service stops after some timeSpring boot REST服务在一段时间后停止
【发布时间】:2016-07-02 08:12:11
【问题描述】:

在触发 Spring Boot REST 服务后,该服务可以正常运行数小时,所有请求都正常运行,没有任何问题。发生的事情是一段时间后随机停止。查看日志时,我没有发现任何错误,除了应用程序已被破坏的信息。

一段时间后的日志

2016-03-09 17:07:33.488  INFO 28359 --- [Thread-12] ationConfigEmbeddedWebApplicationContext : Closing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@5df2d54c: startup date [Wed Mar 09 10:45:18 UTC 2016]; root of context hierarchy
2016-03-09 17:07:33.490  INFO 28359 --- [Thread-12] o.s.j.e.a.AnnotationMBeanExporter        : Unregistering JMX-exposed beans on shutdown
2016-03-09 17:07:33.495  INFO 28359 --- [Thread-12] o.eclipse.jetty.server.ServerConnector   : Stopped ServerConnector@585ebc93{SSL-HTTP/1.1}{0.0.0.0:8443}
2016-03-09 17:07:33.496  INFO 28359 --- [Thread-12] application                              : Destroying Spring FrameworkServlet 'dispatcherServlet'
2016-03-09 17:07:33.496  INFO 28359 --- [Thread-12] o.e.jetty.server.handler.ContextHandler  : Stopped o.s.b.c.e.j.JettyEmbeddedWebAppContext@3d3969ea{/,file:/tmp/jetty-docbase.5267015092605924805.8443/,UNAVAILABLE}

Maven 依赖项

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

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

        <dependency>
            <groupId>org.json</groupId>
            <artifactId>json</artifactId>
        </dependency>

        <dependency>
            <groupId>org.apache.hive</groupId>
            <artifactId>hive-jdbc</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.eclipse.jetty.orbit</groupId>
                    <artifactId>javax.servlet</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.eclipse.jetty.aggregate</groupId>
                    <artifactId>jetty-all</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>com.google.guava</groupId>
                    <artifactId>guava</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.apache.drill.exec</groupId>
            <artifactId>drill-jdbc</artifactId>
            <exclusions>
                <exclusion>
                    <artifactId>hadoop-common</artifactId>
                    <groupId>org.apache.hadoop</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>hadoop-client</artifactId>
                    <groupId>org.apache.hadoop</groupId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <!-- used to update stopwatch -->
            <groupId>org.javassist</groupId>
            <artifactId>javassist</artifactId>
            <version>3.20.0-GA</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.apache.drill</groupId>
            <artifactId>drill-common</artifactId>
            <exclusions>
                <exclusion>
                    <artifactId>hadoop-common</artifactId>
                    <groupId>org.apache.hadoop</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>hadoop-client</artifactId>
                    <groupId>org.apache.hadoop</groupId>
                </exclusion>
                <exclusion>
                    <groupId>com.google.guava</groupId>
                    <artifactId>guava</artifactId>
                </exclusion>
            </exclusions>
        </dependency>


    </dependencies>

关于为什么 Spring Boot REST API 可能会停止的任何想法?我的 maven 依赖项是根据演示 - 并且它正在成功运行 - 这就是为什么服务在没有意义的随机时间后停止的原因。

我用于 Spring Boot 的日志记录设置是

logging.level.org.springframework.web = DEBUG
logging.level.org.hibernate = ERROR
logging.file = /home/REST/Logging.log

【问题讨论】:

  • 会话是否有过期时间?
  • 不,但如果是这种情况,我会在日志中发现休眠错误。
  • 增加日志级别并检查导致关机的原因。由于它正在干净地关闭,我怀疑类似于对嵌入式 servlet 容器或 spring 容器的关闭请求。
  • 日志记录是 logging.level.root=WARN logging.level.org.springframework.web=DEBUG logging.level.org.hibernate=ERROR - 它应该显示所有调试日志
  • 每次都在同一时间停止吗?

标签: java maven spring-boot


【解决方案1】:

根本原因是我与 MySQL 的连接过时

spring.xxx.datasource.testOnBorrow=true
spring.xxx.datasource.validationQuery=SELECT 1

更多详情在这里https://docs.spring.io/spring-ldap/docs/1.3.2.RELEASE/reference/html/pooling.html

【讨论】:

  • 嘿 Mez,我也面临同样的问题,你能告诉我你是如何解决这个问题的吗?我是否需要从上面提到的 application.properties 中删除这些行。请分享你的知识。提前致谢。
  • @Mez 谢谢... :) 我尝试了disabling datasource 的相反方法,只是为了测试。它现在工作正常。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-03
  • 1970-01-01
  • 1970-01-01
  • 2015-05-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多