Как добавить пользовательскую проверку работоспособности в состояние 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",