Служебные эндпоинты и /health
Когда приложение работает на сервере, за ним следят другие программы: балансировщик нагрузки, Kubernetes, система мониторинга. Им нужно быстро узнать, живо ли приложение и доступна ли база данных. Для этого Micronaut предлагает служебные эндпоинты (management endpoints) — готовые адреса вроде /health и /info. Их не нужно писать: достаточно подключить модуль.
Подключение
Возможность генератора называется management. В pom.xml достаточно одной зависимости:
<!-- pom.xml -->
<dependency>
<groupId>io.micronaut</groupId>
<artifactId>micronaut-management</artifactId>
<scope>compile</scope>
</dependency>Обработчик аннотаций для неё не нужен.
Проверка здоровья
curl -i http://localhost:8080/healthHTTP/1.1 200 Ok
content-type: application/json
{"status":"UP"}UP — всё в порядке. Если какая-то проверка не проходит, статус станет DOWN, а код ответа — 503: так балансировщик поймёт, что на этот экземпляр нельзя слать запросы. Анонимный клиент видит только итог. Вошедший пользователь видит подробности:
curl -u anna:changeme http://localhost:8080/health{"name":"blog","status":"UP","details":{"diskSpace":{"name":"blog","status":"UP","details":{"total":161750183936,"free":8383062016,"threshold":10485760}},"jdbc":{"name":"blog","status":"UP","details":{"jdbc:h2:mem:devDb":{"name":"blog","status":"UP","details":{"database":"H2","version":"2.5.250 (2026-08-29)"}}}},...}}Ответ сокращён. Micronaut сам проверяет место на диске, подключение к базе через jdbc, зависшие потоки. Кому показывать подробности, задаёт настройка endpoints.health.details-visible (ANONYMOUS, AUTHENTICATED или NEVER).
Сведения о приложении
/info выдаёт то, что вы сами положите в настройки с префиксом info:
# src/main/resources/application.properties
endpoints.info.sensitive=false
info.blog.name=Java blog
info.blog.version=1.0curl http://localhost:8080/info{"blog":{"version":"1.0","name":"Java blog"}}Строка endpoints.info.sensitive=false делает /info открытым без входа.
Встроенные эндпоинты
| Адрес | Что показывает | Чувствительный |
|---|---|---|
/health | Состояние приложения | нет |
/info | Сведения из настроек info.* | да |
/beans | Все бины контекста | да |
/routes | Все маршруты | да |
/loggers | Уровни журналов, можно менять | да |
/threaddump | Потоки JVM | да |
Чувствительные эндпоинты могут раскрыть устройство приложения, поэтому без настройки они закрыты.
Частая ошибка
С подключённым Micronaut Security даже администратор получает на /beans или /routes ответ 500, а в журнале:
ERROR i.m.http.server.RouteExecutor - Unexpected error occurred: For security purposes, sensitive endpoints are disabled
until you supply your own replacement for SensitiveEndpointRule::checkSensitiveAuthenticatedЭто не поломка, а защита: Micronaut не знает, каким пользователям можно доверить чувствительные данные. Либо оставьте эти эндпоинты выключенными, либо сделайте нужный открытым через endpoints.<имя>.sensitive=false, либо напишите бин с @Replaces(SensitiveEndpointRule.class) — пример такого класса Micronaut печатает прямо в журнале.