Как добавить пользовательскую проверку работоспособности в состояние spring загрузки?
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
Это добавит несколько полезных конечных точек в ваше приложение. Один из них - здоровье. Когда вы запустите приложение и перейдете к конечной точке /health, вы увидите, что он возвращает уже некоторые данные.
{
"status":"UP",
"diskSpace": {
"status":"UP",
"free":56443746,
"threshold":1345660
}
}
Как добавить пользовательскую проверку работоспособности в spring состояние загрузки?
Ответы
Ответ 1
Добавление пользовательской проверки работоспособности легко. Просто создайте новый класс Java, расширьте его из AbstractHealthIndicator и внедрите метод doHealthCheck. Метод получает построитель, переданный с помощью некоторых полезных методов. Вызовите builder.up(), если ваше здоровье в порядке или builder.down(), если это не так. То, что вы делаете, чтобы проверить здоровье, полностью зависит от вас. Возможно, вы хотите выполнить ping на каком-либо сервере или проверить некоторые файлы.
@Component
public class CustomHealthCheck extends AbstractHealthIndicator {
@Override
protected void doHealthCheck(Health.Builder bldr) throws Exception {
// TODO implement some check
boolean running = true;
if (running) {
bldr.up();
} else {
bldr.down();
}
}
}
Этого достаточно, чтобы активировать новую проверку работоспособности (убедитесь, что @ComponentScan находится в вашем приложении). Перезагрузите приложение и найдите свой браузер в конечной точке /health, и вы увидите вновь добавленную проверку работоспособности.
{
"status":"UP",
"CustomHealthCheck": {
"status":"UP"
},
"diskSpace": {
"status":"UP",
"free":56443746,
"threshold":1345660
}
}
Ответ 2
Spring Boot 2.X значительно изменил привод. Новый улучшенный механизм расширения существующих конечных точек включен через @EndpointWebExtension
.
При этом конечную точку работоспособности немного сложнее продлить, потому что один удлинитель для нее предоставляется из коробки самим приводом. Без манипулирования процессом инициализации bean-компонентов ваше приложение не сможет запуститься, поскольку увидит 2 расширения и не поймет, какое из них выбрать. Более простой способ - использовать информацию и расширить ее:
@Component
@EndpointWebExtension(endpoint = InfoEndpoint.class)
public class InfoWebEndpointExtension {
@Value("${info.build.version}")
private String versionNumber;
@Value("${git.commit.id}")
private String gitCommit;
@Value("${info.build.name}")
private String applicationName;
...
@ReadOperation
public WebEndpointResponse<Map> info() {
Не забывайте, что вы также можете переназначить URL-адреса. В моем случае я предпочитаю/статус/здоровье и не хочу/привод/в пути:
management.endpoints.web.base-path=/
management.endpoints.web.path-mapping.info=status
Другая причина, по которой я предпочитаю /info, заключается в том, что я не получаю эту вложенную структуру, которая используется по умолчанию для /health:
{
"status": {
"status": "ON",
Ответ 3
Если вы заинтересованы в интеграции Springboot, Dropwizard Metrics и Hicary CP, прочтите мой блог https://medium.com/@venkatakambhampaty/health-checks-in-springboot-73b8dc760052