Я внедряю HealthIndicator для своего приложения Springboot, которое проверяет экземпляры Jenkins, проверяют ли они. Я делаю это, пинг ${JENKINS_URL}/login
. Если это произойдет, я получу ответ 200. Если это не так, я получаю очень некрасивую трассировку стека, например:
org.springframework.http.InvalidMediaTypeException: Invalid mime type "html": does not contain '/'
at org.springframework.http.MediaType.parseMediaType(MediaType.java:574) ~[spring-web-5.2.2.RELEASE.jar:5.2.2.RELEASE]
at org.springframework.http.HttpHeaders.getContentType(HttpHeaders.java:966) ~[spring-web-5.2.2.RELEASE.jar:5.2.2.RELEASE]
at org.springframework.web.client.DefaultResponseErrorHandler.getCharset(DefaultResponseErrorHandler.java:224) ~[spring-web-5.2.2.RELEASE.jar:5.2.2.RELEASE]
at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:165) ~[spring-web-5.2.2.RELEASE.jar:5.2.2.RELEASE]
at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:112) ~[spring-web-5.2.2.RELEASE.jar:5.2.2.RELEASE]
at org.springframework.web.client.ResponseErrorHandler.handleError(ResponseErrorHandler.java:63) ~[spring-web-5.2.2.RELEASE.jar:5.2.2.RELEASE]
at org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:785) ~[spring-web-5.2.2.RELEASE.jar:5.2.2.RELEASE]
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:743) ~[spring-web-5.2.2.RELEASE.jar:5.2.2.RELEASE]
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:677) ~[spring-web-5.2.2.RELEASE.jar:5.2.2.RELEASE]
at org.springframework.web.client.RestTemplate.getForEntity(RestTemplate.java:345) ~[spring-web-5.2.2.RELEASE.jar:5.2.2.RELEASE]
at com.path.to.package.JenkinsCache.pingJenkins(JenkinsCache.java:60) [classes/:na]
Мой код драйвера выглядит следующим образом (в JenkinsCache
):
private String pingJenkins(String jenkinsEndpoint) {
RestTemplate restTemplate = new RestTemplate();
try{
restTemplate.getForEntity(jenkinsEndpoint+"/login", String.class);
return "OK";
} catch (Exception e) {
log.error("An error occurred while pinging: "+jenkinsEndpoint, e);
}
return "DOWN";
}
Я бы предпочел перехватить указанное c исключение, но если при проверке связи с экземпляром Jenkins, который не работает, получается InvalidMediaTypeException
, он выглядит немного запутанным фрагментом кода (то есть я ожидал бы что-то вроде RestClientException
, et c). Каков хороший способ поймать / обработать это исключение? Должен ли я поймать RuntimeException
вместо этого?