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依賴:

<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 服務了。


慣例,厚顏無恥的放一下我的公衆號,歡迎各位大佬來一起探討技術,交流讀書心得

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章