SpringBoot actuator 健康檢查不通過的解決方案
SpringBoot actuator 健康檢查不通過
今天遇到有個服務能夠注冊成功,但是健康檢查不通過,通過瀏覽器訪問健康檢查的url,chrome的network一直顯示pending,說明這個請求提交了,但是得不到返回,卡住了。
原來以為健康檢查就是檢查服務端口下的/health這個請求本身是否能正常返回,其實不是。
所謂健康檢查是有很多檢查項的,springboot中繼承AbstractHealthIndicator的類,比如DataSourceHealthIndicator RedisHealthIndicator 等,springboot會自動配置,比如使用了mysql的datasouce,健康檢查的時候就會執(zhí)行DataSourceHealthIndicator 的doHealthCheck(),使用了redis,就會執(zhí)行RedisHealthIndicator 的doHealthCheck()。
解決方式:
首先可以確定是否是這些外部數(shù)據(jù)源連接不了導致健康檢查不通過,可以配置
management:
health:
db:
enabled: false
redis:
enabled: false
elasticsearch:
enabled: false
把系統(tǒng)中用到的都關閉健康檢查,看健康檢查是否能正常通過,如果能通過再一個個打開逐個排除問題
最終發(fā)現(xiàn)上面的pending情況就是由于mysql的url配置不對,比如端口錯誤,或者mysql用戶的權限不夠,DataSourceHealthIndicator 的doHealthCheck()會去連接mysql連接不成功,就卡在連接mysql那里了。
配置正確的url,開啟權限,解決問題。
Spring Boot健康檢查相關配置和整理
1.什么是Spring Boot的健康檢查,有什么用?
Spring Boot提供了多項組件的健康檢查,有利于監(jiān)控各組件運行狀況,但是有時開發(fā)者因此會啟動不成功,報錯等,需要合理配置。
2.Spring Boot項目中都有哪些檢查,如何配置相關檢查:
2.1首先健康檢查引入的包是
<dependency>
<groupid>org.springframework.boot</groupid>
<artifactid>spring-boot-starter-actuator</artifactid>
</dependency>
2.2相關健康檢查相關Indicator
CassandraHealthIndicator檢查Cassandra是否可用DiskSpaceHealthIndicator檢查磁盤空間是否不足DataSourceHealthIndicator檢查能否從DataSource獲取鏈接ElasticsearchHealthIndicator檢查Elasticsearch cluste是否可用JmsHealthIndicator檢查JMS broker是否可用MailHealthIndicator檢查mail server是否可用MongoHealthIndicator檢查Mongo database是否可用RabbitHealthIndicator檢查Rabbit server是否可用RedisHealthIndicator檢查Redis server是否可用SolrHealthIndicator檢查Solr server是否可用
可以看到,有各項外部服務的檢查,具體的請瀏覽官方文檔,這里不再贅余
2.3如何關閉/開啟健康檢查
application.properties里顯式設定
//如禁止es的健康檢查如下,默認均為開啟狀態(tài) management.health.elasticsearch.enabled=false
也可以使用*全部禁止
management.health.*.enabled=false
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Java利用Jackson序列化實現(xiàn)數(shù)據(jù)脫敏詳解
在項目中有些敏感信息不能直接展示,比如客戶手機號、身份證、車牌號等信息,展示時均需要進行數(shù)據(jù)脫敏,防止泄露客戶隱私。本文將利用Jackson序列化實現(xiàn)數(shù)據(jù)脫敏,需要的可以參考一下2023-03-03
SpringBoot項目使用@Scheduled注解實現(xiàn)定時任務的方法
文章介紹了在SpringBoot項目中使用@Scheduled注解實現(xiàn)定時任務的三種方式:基于注解、基于接口和基于注解設定多線程定時任務,詳細講解了@Scheduled注解的使用方法、各個參數(shù)以及如何配置動態(tài)定時任務和多線程定時任務,感興趣的朋友一起看看吧2025-03-03

