SpringBoot优雅停机

1.让一个SpringBoot服务停机有几种方案

  1. kill端口,这种方式简单粗暴,但是有缺陷,就是还没处理完的任务也就直接挂掉了,影响用户体验,也容易产生错误数据,尤其是当你的服务是微服务的时候,调用方就很被动了。
  2. 关闭tomcat,这种方式要求你的服务是 war 包方式打包部署的,对于 jar 包的内嵌tomcat 并不适用
  3. 通过spring提供的 SpringBoot Actuator来关闭服务。这种方式比较灵活,既可以简单的使用脚本关闭服务,也可以在服务数量多的时候通过调用接口统一管理。如果服务是集群部署,这种方式对于服务升级发布也比较友好。

2.集成SpringBoot Actuator

SpringBoot Actuator可以提供SpringBoot服务监控的功能,可以通过对外暴露 Rest 接口,远程shell等方式来获得功能。

提供的接口如下,表格是copy的,原文链接:https://www.jianshu.com/p/af9738634a21

HTTP 方法 路径 描述
GET /autoconfig 提供了一份自动配置报告,记录哪些自动配置条件通过了,哪些没通过
GET /configprops 描述配置属性(包含默认值)如何注入Bean
GET /beans 描述应用程序上下文里全部的Bean,以及它们的关系
GET /dump 获取线程活动的快照
GET /env 获取全部环境属性
GET /env/{name} 根据名称获取特定的环境属性值
GET /health 报告应用程序的健康指标,这些值由HealthIndicator的实现类提供
GET /info 获取应用程序的定制信息,这些信息由info打头的属性提供
GET /mappings 描述全部的URI路径,以及它们和控制器(包含Actuator端点)的映射关系
GET /metrics 报告各种应用程序度量信息,比如内存用量和HTTP请求计数
GET /metrics/{name} 报告指定名称的应用程序度量值
POST /shutdown 关闭应用程序,要求endpoints.shutdown.enabled设置为true
GET /trace 提供基本的HTTP请求跟踪信息(时间戳、HTTP头等)

集成很简单,添加上 SpringBoot Actuator 的依赖,在application.yml或者application.porperties中写上配置就好了。

maven依赖:


    org.springframework.boot
    spring-boot-starter-actuator

yml配置:

#    服务监控
management:
  endpoint:
    health:
      show-details: always
    shutdown:
      enabled: true
  endpoints:
    web:
      exposure:
        include: "*"

我这里使用的版本是 2.1.6.RELEASE,不同版本可能配置略有变动。需要注意的是我这里暴露了所有节点,主要是为了方便测试,默认是只暴露 health info 节点的,这个在json文件里也有注明。还有shutdown必须要手动打开,因为默认是关闭的。

{
      "name": "management.endpoints.web.exposure.include",
      "type": "java.util.Set",
      "description": "Endpoint IDs that should be included or '*' for all.",
      "sourceType": "org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointProperties$Exposure",
      "defaultValue": [
        "health",
        "info"
      ]
    }

shutdown的访问地址我这里贴一下示例: http://127.0.0.1:9001/actuator/health

actuator是默认的地址,如果需要定制访问地址,可以在配置文件中修改配置。还有shutdown接口访问必须是以 POST 请求方式访问,不然是返回404的。

3.关闭服务

如果你是通过其他服务发起请求来关闭服务,到这里应该已经知道怎么做了。如果是通过 .bat 文件的方式来访问,就需要接着看下去了。

我采用的是使用 curl 来发起 POST 请求关闭服务,命令很简单,就下面这一行。-X POST 的意思是表示发起post请求。

curl http://127.0.0.1:9001/actuator/shutdown -X POST

可以把这一行命令粘贴到 .bat文件里,然后关闭服务的时候双击就可以了。但是有可能服务器并没有 curl ,这就需要配置安装了。可以打开cmd窗口输入curl试一下有没有curl,如果提示 “不是内部或外部命令”,说明没安装或者没有添加到PATH环境变量里去。这篇文章针对的是 windows 服务器(不要问我为啥用的是windows服务器),所以需要下载安装windows版的curl。下载地址:https://curl.haxx.se/download.html ,根据自己的系统选择合适的版本安装。我选择的是 windows 64 bit 7.6.53 这个版本的。下载完成之后解压安装,配置解压目录到 PATH ,然后重新打开cmd窗口输入 crul ,如果没有提示 “不是内部或外部命令” 说明安装成功。双击 .bat 文件就可以关闭 SpringBoot 服务了。


惯例,厚颜无耻的放一下我的公众号,欢迎各位大佬来一起探讨技术,交流读书心得

SpringBoot优雅停机_第1张图片
image

你可能感兴趣的:(SpringBoot优雅停机)