1.让一个SpringBoot服务停机有几种方案
- kill端口,这种方式简单粗暴,但是有缺陷,就是还没处理完的任务也就直接挂掉了,影响用户体验,也容易产生错误数据,尤其是当你的服务是微服务的时候,调用方就很被动了。
- 关闭tomcat,这种方式要求你的服务是 war 包方式打包部署的,对于 jar 包的内嵌tomcat 并不适用
- 通过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 服务了。
惯例,厚颜无耻的放一下我的公众号,欢迎各位大佬来一起探讨技术,交流读书心得