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依賴:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
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<java.lang.String>",
"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 服務了。
慣例,厚顏無恥的放一下我的公衆號,歡迎各位大佬來一起探討技術,交流讀書心得