Spring Boot 教程(五)-- 生產環境運維支援
阿新 • • 發佈:2018-12-25
本篇部落格是看了別人的部落格然後根據自己的理解整理了出來的筆記,發出來大家交流學習,如果有不足的地方請大家指正,大家也可以直接去源部落格那裡看,源部落格寫的真的很好 。
一、簡介 1.問題提出: 1> 當應用部署到生產環境時,需要各種運維相關的功能的支援,包括效能指標、執行資訊和應用管理等。所有這些功能都有很多技術和開源庫可以實現。 2> Spring Boot 對這些運維相關的功能進行了整合,形成了一個功能完備和可定製的功能集,稱之為 Actuator。 2.解決方案: 只需要在 POM 檔案中增加對 “org.springframe.boot:spring-boot-starter-actuator” 的依賴就可以新增 Actuator。Actuator 在新增之後,會自動暴露一些 HTTP 服務來提供這些資訊。表 2. Spring Boot Actuator 所提供的 HTTP 服務
名稱 | 說明 | 是否包含敏感資訊 |
---|---|---|
autoconfig | 顯示 Spring Boot 自動配置的資訊。 | 是 |
beans | 顯示應用中包含的 Spring bean 的資訊。 | 是 |
configprops | 顯示應用中的配置引數的實際值。 | 是 |
dump | 生成一個 thread dump。 | 是 |
env | 顯示從 ConfigurableEnvironment 得到的環境配置資訊。 | 是 |
health | 顯示應用的健康狀態資訊。 | 否 |
info | 顯示應用的基本資訊。 | 否 |
metrics | 顯示應用的效能指標。 | 是 |
mappings |
顯示 Spring MVC 應用中通過“ @RequestMapping”新增的路徑對映。 |
是 |
shutdown | 關閉應用。 | 是 |
trace | 顯示應用相關的跟蹤(trace)資訊。 | 是 |
1> 對於表 2中的每個服務,通過訪問名稱對應的 URL 就可以獲取到相關的資訊。
-----如訪問“/info”就可以獲取到 info 服務對應的資訊。
2> 服務是否包含敏感資訊說明了該服務暴露出來的資訊是否包含一些比較敏感的資訊,從而確定是否需要新增相應的訪問控制,而不是對所有人都公開。
3> 所有的這些服務都是可以配置的,比如通過改變名稱來改變相應的 URL。下面對幾個重要的服務進行介紹。
二、幾個HTTP 服務介紹 1.health 服務 作用: 1> Spring Boot 預設提供了對應用本身、關係資料庫連線、MongoDB、Redis 和 Rabbit MQ 的健康狀態的檢測功能。 2> 當應用中添加了 DataSource 型別的 bean 時,Spring Boot 會自動在 health 服務中暴露資料庫連線的資訊。 3> 應用也可以提供自己的健康狀態資訊,如程式碼清單 7 所示。
清單 7. 自定義 health 服務
@Component
publicclassAppHealthIndicatorimplementsHealthIndicator{
@Override
publicHealth health(){
returnHealth.up().build();
}
}
使用自定義Heath服務:
應用只需要實現 org.springframework.boot.actuate.health.HealthIndicator 介面,並返回一個 org.springframework.boot.actuate.health.Health 物件,就可以通過 health 服務來獲取所暴露的資訊。如程式碼清單
8 所示。清單 8. health 服務返回的結果
{"status":"UP","app":{"status":"UP"},"db":{"status":"UP","database":"HSQL Database Engine","hello":1}}
2.info 服務
1> info 服務所暴露的資訊是完全由應用來確定的。
2> 應用中任何以“info.”開頭的配置引數會被自動的由 info 服務來暴露。
3> 只需要往 application.properties 中新增以“info.”開頭的引數即可,
如程式碼清單
9 所示。清單 9. 新增 info 服務所需配置引數的屬性檔案
info.app_name=My First Spring Boot Application
info.app_version=1.0.0
當訪問“/info”時,訪問的 JSON 資料如程式碼清單
10 所示。清單 10. Info 服務返回的結果
{"app_name":"My First Spring Boot Application","app_version":"1.0.0"}
3.metrics 服務
作用:當訪問 metrics 服務時,可以看到 Spring Boot 通過 SystemPublicMetrics 預設提供的一些系統的效能引數值,包括記憶體、CPU、Java 類載入和執行緒等的基本資訊。
1.應用可以記錄其他所需要的資訊,Spring Boot 預設提供了兩種型別的效能指標記錄方式:gauge
和 counter。
1> gauge 用來記錄單個絕對數值
2> counter 用來記錄增量或減量值。
--------比如在一個 Web 應用中,可以用 counter 來記錄當前線上的使用者數量。當用戶登入時,把 counter 的值加 1;當用戶退出時,把 counter 的值減 1。程式碼清單
11 給出了一個示例。清單 11. 自定義的 metrics 服務
@RestController
publicclassGreetingsController{
@Autowired
privateCounterService counterService;
@RequestMapping("/greet")
publicString greet(){
counterService.increment("myapp.greet.count");
return"Hello!";
}
}
在程式碼清單
11 中添加了對 Spring Boot 提供的 CounterService 的依賴。
-------當 greet 方法被呼叫時,會把名稱為“myapp.greet.count”的計數器的值加 1。也就是當用戶每次訪問“/greet”時,該計算器就會被加 1。
注意:除了 CounterService 之外,還可以使用 GaugeService 來記錄絕對值。4.使用 JMX 進行管理 1. Actuator 不方便的地方 1> 新增 Actuator 後所暴露的 HTTP 服務只能提供只讀的資訊。 2> 如果需要對應用在執行時進行管理,則需要用到 JMX。 2.Spring Boot 預設提供了 JMX 管理的支援,用來解決以上問題 1> 只需要通過 JDK 自帶的 JConsole 連線到應用的 JMX 伺服器,就可以看到在域“org.springframework.boot”中 mbean。 2> 可以通過 Spring 提供的 @ManagedResource、@ManagedAttribute 和 @ManagedOperation 註解來建立應用自己的 mbean。