Spring boot REST服务在一段时间后停止
Posted
技术标签:
【中文标题】Spring boot REST服务在一段时间后停止【英文标题】:Spring boot REST service stops after some time 【发布时间】: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@585ebc93SSL-HTTP/1.10.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 - 它应该显示所有调试日志 每次都在同一时间停止吗? 【参考方案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 的相反方法,只是为了测试。它现在工作正常。以上是关于Spring boot REST服务在一段时间后停止的主要内容,如果未能解决你的问题,请参考以下文章
spring-boot web 应用程序在一段时间后失去连接到 MySQL / RDS 的能力
如何在 Spring Boot REST API 上设置超时?
Spring-Boot REST 服务基本 http 身份验证排除一个端点