SpringBoot
是為了簡化Spring
應用的創建、運行、調試、部署等一系列問題而誕生的產物,自動裝配的特性讓我們可以更好的關注業務本身而不是外部的XML配置,我們只需遵循規范,引入相關的依賴就可以輕易的搭建出一個 WEB 工程
actuator
是spring boot
項目中非常強大一個功能,有助於對應用程序進行監視和管理,通過 restful api
請求來監管、審計、收集應用的運行情況,針對微服務而言它是必不可少的一個環節…
Endpoints
actuator
的核心部分,它用來監視應用程序及交互,spring-boot-actuator
中已經內置了非常多的 Endpoints(health、info、beans、httptrace、shutdown等等)
,同時也允許我們自己擴展自己的端點
Spring Boot 2.0
中的端點和之前的版本有較大不同,使用時需注意。另外端點的監控機制也有很大不同,啟用了不代表可以直接訪問,還需要將其暴露出來,傳統的management.security
管理已被標記為不推薦。
內置Endpoints
id | desc | Sensitive |
---|---|---|
auditevents |
顯示當前應用程序的審計事件信息 | Yes |
beans |
顯示應用Spring Beans的完整列表 | Yes |
caches |
顯示可用緩存信息 | Yes |
conditions |
顯示自動裝配類的狀態及及應用信息 | Yes |
configprops |
顯示所有 @ConfigurationProperties 列表 | Yes |
env |
顯示 ConfigurableEnvironment 中的屬性 | Yes |
flyway |
顯示 Flyway 數據庫遷移信息 | Yes |
health |
顯示應用的健康信息(未認證只顯示status ,認證顯示全部信息詳情) |
No |
info |
顯示任意的應用信息(在資源文件寫info.xxx即可) | No |
liquibase |
展示Liquibase 數據庫遷移 | Yes |
metrics |
展示當前應用的 metrics 信息 | Yes |
mappings |
顯示所有 @RequestMapping 路徑集列表 | Yes |
scheduledtasks |
顯示應用程序中的計划任務 | Yes |
sessions |
允許從Spring會話支持的會話存儲中檢索和刪除用戶會話。 | Yes |
shutdown |
允許應用以優雅的方式關閉(默認情況下不啟用) | Yes |
threaddump |
執行一個線程dump | Yes |
httptrace |
顯示HTTP跟蹤信息(默認顯示最后100個HTTP請求 - 響應交換) | Yes |
導入依賴
在 pom.xml
中添加 spring-boot-starter-actuator
的依賴
1 |
<dependency> |
注意事項
如果要訪問info
接口想獲取maven
中的屬性內容請記得添加如下內容
1 |
<build> |
屬性配置
在 application.properties
文件中配置actuator
的相關配置,其中info
開頭的屬性,就是訪問info
端點中顯示的相關內容,值得注意的是Spring Boot2.x
中,默認只開放了info、health
兩個端點,剩余的需要自己通過配置management.endpoints.web.exposure.include
屬性來加載(有include
自然就有exclude
,不做詳細概述了)。如果想單獨操作某個端點可以使用management.endpoint.端點.enabled
屬性進行啟用或禁用
1 |
# 描述信息 |
簡單測試
啟動項目,訪問 http://localhost:8080/actuator/info 看到如下內容代表配置成功
1 |
{ |
自定義 - 重點
上面講了很多都是配置相關,以及自帶的一些端點,在實際應用中有時候默認並不能滿足我們的要求,比如Spring Boot
默認的健康端點就很有可能不能滿足
默認裝配 HealthIndicators
下列是依賴spring-boot-xxx-starter
后相關HealthIndicator
的實現(通過management.health.defaults.enabled
屬性可以禁用它們),但想要獲取一些額外的信息時,自定義的作用就體現出來了…
名稱 | 描述 |
---|---|
CassandraHealthIndicator |
檢查 Cassandra 數據庫是否啟動。 |
DiskSpaceHealthIndicator |
檢查磁盤空間不足。 |
DataSourceHealthIndicator |
檢查是否可以獲得連接 DataSource 。 |
ElasticsearchHealthIndicator |
檢查 Elasticsearch 集群是否啟動。 |
InfluxDbHealthIndicator |
檢查 InfluxDB 服務器是否啟動。 |
JmsHealthIndicator |
檢查 JMS 代理是否啟動。 |
MailHealthIndicator |
檢查郵件服務器是否啟動。 |
MongoHealthIndicator |
檢查 Mongo 數據庫是否啟動。 |
Neo4jHealthIndicator |
檢查 Neo4j 服務器是否啟動。 |
RabbitHealthIndicator |
檢查 Rabbit 服務器是否啟動。 |
RedisHealthIndicator |
檢查 Redis 服務器是否啟動。 |
SolrHealthIndicator |
檢查 Solr 服務器是否已啟動。 |
健康端點(第一種方式)
實現HealthIndicator
接口,根據自己的需要判斷返回的狀態是UP
還是DOWN
,功能簡單。
1 |
package com.battcn.health; |
簡單測試
啟動項目,訪問 http://localhost:8080/actuator/health 看到如下內容代表配置成功
1 |
{ |
健康端點(第二種方式)
繼承AbstractHealthIndicator
抽象類,重寫doHealthCheck
方法,功能比第一種要強大一點點,默認的DataSourceHealthIndicator 、 RedisHealthIndicator
都是這種寫法,內容回調中還做了異常的處理。
1 |
package com.battcn.health; |
簡單測試
啟動項目,訪問 http://localhost:8080/actuator/health 看到如下內容代表配置成功
1 |
{ |
定義自己的端點
上面介紹的 info
、health
都是spring-boot-actuator
內置的,真正要實現自己的端點還得通過@Endpoint、 @ReadOperation、@WriteOperation、@DeleteOperation
。
注解介紹
不同請求的操作,調用時缺少必需參數,或者使用無法轉換為所需類型的參數,則不會調用操作方法,響應狀態將為400(錯誤請求)
@Endpoint
構建 rest api 的唯一路徑@ReadOperation
GET請求,響應狀態為 200 如果沒有返回值響應 404(資源未找到)@WriteOperation
POST請求,響應狀態為 200 如果沒有返回值響應 204(無響應內容)@DeleteOperation
DELETE請求,響應狀態為 200 如果沒有返回值響應 204(無響應內容)
1 |
package com.battcn.endpoint; |
以為這就大功告成了嗎,現實告訴我的是spring-boot
默認是不認識這玩意的,得申明成一個Bean
(請看 主函數
)
主函數
1 |
package com.battcn; |
測試
完成准備事項后,啟動Chapter13Application
訪問 http://localhost:8080/actuator/battcn 看到如下內容代表配置成功…
1 |
{ |
總結
參考文檔:https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#production-ready