SpringBoot actuator 健康檢查不通過的解決方案
SpringBoot actuator 健康檢查不通過
今天遇到有個(gè)服務(wù)能夠注冊(cè)成功,但是健康檢查不通過,通過瀏覽器訪問健康檢查的url,chrome的network一直顯示pending,說明這個(gè)請(qǐng)求提交了,但是得不到返回,卡住了。
原來以為健康檢查就是檢查服務(wù)端口下的/health這個(gè)請(qǐng)求本身是否能正常返回,其實(shí)不是。
所謂健康檢查是有很多檢查項(xiàng)的,springboot中繼承AbstractHealthIndicator的類,比如DataSourceHealthIndicator RedisHealthIndicator 等,springboot會(huì)自動(dòng)配置,比如使用了mysql的datasouce,健康檢查的時(shí)候就會(huì)執(zhí)行DataSourceHealthIndicator 的doHealthCheck(),使用了redis,就會(huì)執(zhí)行RedisHealthIndicator 的doHealthCheck()。
解決方式:
首先可以確定是否是這些外部數(shù)據(jù)源連接不了導(dǎo)致健康檢查不通過,可以配置
management: health: db: enabled: false redis: enabled: false elasticsearch: enabled: false
把系統(tǒng)中用到的都關(guān)閉健康檢查,看健康檢查是否能正常通過,如果能通過再一個(gè)個(gè)打開逐個(gè)排除問題
最終發(fā)現(xiàn)上面的pending情況就是由于mysql的url配置不對(duì),比如端口錯(cuò)誤,或者mysql用戶的權(quán)限不夠,DataSourceHealthIndicator 的doHealthCheck()會(huì)去連接mysql連接不成功,就卡在連接mysql那里了。
配置正確的url,開啟權(quán)限,解決問題。
Spring Boot健康檢查相關(guān)配置和整理
1.什么是Spring Boot的健康檢查,有什么用?
Spring Boot提供了多項(xiàng)組件的健康檢查,有利于監(jiān)控各組件運(yùn)行狀況,但是有時(shí)開發(fā)者因此會(huì)啟動(dòng)不成功,報(bào)錯(cuò)等,需要合理配置。
2.Spring Boot項(xiàng)目中都有哪些檢查,如何配置相關(guān)檢查:
2.1首先健康檢查引入的包是
<dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-actuator</artifactid> </dependency>
2.2相關(guān)健康檢查相關(guān)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是否可用
可以看到,有各項(xiàng)外部服務(wù)的檢查,具體的請(qǐng)瀏覽官方文檔,這里不再贅余
2.3如何關(guān)閉/開啟健康檢查
application.properties里顯式設(shè)定
//如禁止es的健康檢查如下,默認(rèn)均為開啟狀態(tài) management.health.elasticsearch.enabled=false
也可以使用*全部禁止
management.health.*.enabled=false
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Spring AOP的底層實(shí)現(xiàn)方式-代理模式
這篇文章主要介紹了Spring AOP的底層實(shí)現(xiàn)方式-代理模式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11Java面向?qū)ο蠡A(chǔ)知識(shí)之封裝,繼承,多態(tài)和抽象
這篇文章主要介紹了Java面向?qū)ο蟮姆庋b,繼承,多態(tài)和抽象,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java基礎(chǔ)的小伙伴們有很好的幫助,需要的朋友可以參考下2021-11-11Java CountDownLatch應(yīng)用場景代碼實(shí)例
這篇文章主要介紹了Java CountDownLatch應(yīng)用場景代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09Java利用Jackson序列化實(shí)現(xiàn)數(shù)據(jù)脫敏詳解
在項(xiàng)目中有些敏感信息不能直接展示,比如客戶手機(jī)號(hào)、身份證、車牌號(hào)等信息,展示時(shí)均需要進(jìn)行數(shù)據(jù)脫敏,防止泄露客戶隱私。本文將利用Jackson序列化實(shí)現(xiàn)數(shù)據(jù)脫敏,需要的可以參考一下2023-03-03java實(shí)現(xiàn)Redisson的基本使用
Redisson是一個(gè)在Redis的基礎(chǔ)上實(shí)現(xiàn)的Java駐內(nèi)存數(shù)據(jù)網(wǎng)格客戶端,本文主要介紹了java實(shí)現(xiàn)Redisson的基本使用,具有一定的參考價(jià)值,感興趣的可以了解一下2023-12-12SpringBoot項(xiàng)目使用@Scheduled注解實(shí)現(xiàn)定時(shí)任務(wù)的方法
文章介紹了在SpringBoot項(xiàng)目中使用@Scheduled注解實(shí)現(xiàn)定時(shí)任務(wù)的三種方式:基于注解、基于接口和基于注解設(shè)定多線程定時(shí)任務(wù),詳細(xì)講解了@Scheduled注解的使用方法、各個(gè)參數(shù)以及如何配置動(dòng)態(tài)定時(shí)任務(wù)和多線程定時(shí)任務(wù),感興趣的朋友一起看看吧2025-03-03