本文介紹了如何在Java代碼中訪問Spring執行器運行狀況檢查的結果?的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
我已經設置了一個帶有端點/Actuator/Health的Health Check執行器,當您轉到URL時,它會為我的應用程序生成類似以下內容:
{"status":"UP","app":{"status":"UP"},"db":{"status":"UP"}}
有沒有辦法可以使用SpringAPI在我的Java代碼中訪問這些結果?我正在監視任何發生故障的情況,并在發生故障時發送延遲通知,我對監視數據庫何時發生故障特別感興趣。我已經有了創建松弛通知的方法,我只需要發生故障的組件的名稱(即db)。
有人能幫忙嗎?
希望我的問題有道理,我還是個新手。
編輯:我已經@Override Health,如果整個應用程序都關閉了,它就會進入這個階段,不確定在這個階段是否有方法可以獲得當時還關閉的內容(db等)并傳遞到Sack方法中?:
@Override
public Health health() {
System.out.println("HealthIndicator called at " + LocalDateTime.now() + " state=" + (state?"Up":"Down"));
if(state) {
return Health.up().build();
} else {
triggerSlackNotifications(failedComponent, status);
return Health.down().build();
}
}
推薦答案
要獲取有關運行狀況的更多詳細信息,您可以在application.properties
中添加以下內容
management.endpoint.health.enabled=true
management.endpoint.health.show-details=always
之后,您將獲得更多信息,如下所示。
{
"status": "UP",
"details": {
"diskSpace": {
"status": "UP",
"details": {
"total": 467848392704,
"free": 69999702016,
"threshold": 10485760
}
},
"db": {
"status": "UP",
"details": {
"database": "MySQL",
"hello": 1
}
},
"mail": {
"status": "UP",
"details": {
"location": "smtp.gmail.com:<port>"
}
}
}
}
解決方案
@GetMapping("/statusDB")
public String healthCheck() throws IOException, JSONException
{
StringBuilder result = new StringBuilder();
URL url = new URL("http://localhost:8080/actuator/health");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.getResponseCode();
BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line;
while ((line = rd.readLine()) != null) {
result.append(line);
}
rd.close();
System.out.println("Result: "+result.toString());
JSONObject jsonObject =new JSONObject(result.toString());
System.out.println("jsonObject: "+jsonObject);
return "Status of Database is "+jsonObject.getJSONObject("details").getJSONObject("db").get("status");
}
這篇關于如何在Java代碼中訪問Spring執行器運行狀況檢查的結果?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,