Настройка Spring Boot Starter
Как подключить Axelix Spring Boot Starter к приложению Spring Boot, чтобы Axelix Master мог обнаружить его, считать его состояние и воздействовать на него.
На этой странице показано, как подключить Axelix Spring Boot Starter к сервису на Spring Boot, чтобы Axelix Master мог обнаруживать его, считывать его состояние и взаимодействовать с ним — как через пользовательский интерфейс, так и через встроенный в Master сервер MCP (Model Context Protocol), который предоставляет те же данные агентам искусственного интеллекта. Выберите модуль стартера, соответствующий мажорной версии Boot, предоставьте доступ к Axelix actuator-эндпоинтам (начиная с Axelix 1.2.0 это происходит автоматически), поделитесь с Master ключом для подписи JWT и укажите Master, где найти сервис.
Прежде чем вы начнёте
Несколько фактов, которые стоит запомнить, прежде чем вы скопируете любой из приведённых ниже фрагментов.
- Три модуля стартера, по одному для каждой мажорной версии Spring Boot. Выберите тот, который соответствует версии
Boot, которую уже использует ваш сервис:
com.axelixlabs:axelix-spring-boot-2-starter— Spring Boot 2.x (собран и протестирован с использованием2.7.18, Spring Cloud2021.0.9, минимальная версия JDK 11).com.axelixlabs:axelix-spring-boot-3-starter— Spring Boot 3.x (собран и протестирован с использованием3.0.13, Spring Cloud2022.0.4, минимальная версия JDK 17).com.axelixlabs:axelix-spring-boot-4-starter— Spring Boot 4.x (собран и протестирован с использованием4.0.6, Spring Cloud2025.1.0, минимальная версия JDK 17).
- Что добавляет стартер: набор Axelix-специфичных actuator-эндпоинтов (
axelix-metadata,axelix-beans,axelix-loggers, …), JWT-фильтр авторизации, который ограничивает доступ к ним, и опциональный компонент саморегистрации, который объявляет сервис в Master. - Плагин сборки Axelix также обязателен: помимо зависимости стартера, подключите Gradle- или Maven-плагин сборки
Axelix. Он записывает координаты сборки (
groupId/artifactId/version) в артефакт, а Master идентифицирует каждое приложение именно по этим координатам — сервис, собранный без плагина, не сможет зарегистрироваться. См. Что такое плагин сборки Axelix? и Настройка плагина сборки. - Два потребителя одних и тех же данных: Master отдаёт пользовательский интерфейс Axelix по адресу
/и сервер MCP по адресу/api/mcp(управляетсяaxelix.master.mcp-server.enabled, по умолчанию включён). Оба считывают данные с тех же actuator-эндпоинтов, которые публикует стартер, — поэтому подключение стартера делает сервис видимым и для пользователей UI, и для MCP-клиентов без дополнительной настройки на стороне стартера. - Что нужно Master для взаимодействия с сервисом: HTTP-доступность к базовому пути актуатора сервиса (по умолчанию
/actuator), Axelix-эндпоинты, открытые черезmanagement.endpoints.web.exposure.include, и ключ для подписи JWT, идентичный тому, который настроен на Master — см. Аутентификация — JWT на стороне Master. - Master может найти сервис двумя способами:
- Автоматическое обнаружение на стороне Master — Master сканирует свою среду (в настоящее время — Kubernetes Services) и проверяет actuator-эндпоинт каждого из них. Стартеру нужно только предоставить доступ к эндпоинтам, ничего дополнительно настраивать не нужно.
- Самостоятельная регистрация — стартер отправляет в Master heartbeat через фиксированный интервал. Используйте этот метод, если Master не может просканировать среду сервиса (другая сеть, отсутствие интеграции с платформой, обычные виртуальные машины).
Добавьте зависимость
Укажите координату стартера, соответствующую мажорной версии Boot.
В сниппетах ниже для иллюстрации зафиксирована версия 1.0.0. Проверьте Maven
Central на актуальный опубликованный тег и используйте эту
версию в своей сборке.
dependencies {
implementation("com.axelixlabs:axelix-spring-boot-4-starter:1.0.0")
}Стартер также зависит от Spring Boot
Actuator. Если в вашем сервисе ещё
нет spring-boot-starter-actuator, добавьте его рядом.
Плагин сборки — отдельный шаг
Подключение плагина сборки Axelix обязательно для каждого управляемого сервиса, но оно вынесено в отдельный раздел — см. Что такое плагин сборки Axelix? и Настройка плагина сборки.
Actuator-эндпоинты
Начиная с Axelix 1.2.0 ничего настраивать вручную не нужно: стартер сам добавляет свои actuator-эндпоинты в
management.endpoints.web.exposure.include при старте приложения, поэтому Master получает к ним доступ «из коробки».
На более старых версиях стартер этого не делает, и эндпоинты нужно перечислить вручную — см. Открытие эндпоинтов на
Axelix ниже 1.2.0.
Что открывает стартер
Стартер выставляет следующие эндпоинты:
| Эндпоинт | Назначение |
|---|---|
axelix-metadata обязательный | Метаданные сервиса; Master опрашивает его первым |
axelix-details | Сводная информация об инстансе |
axelix-beans | Бины контекста |
axelix-caches | Кэши (при наличии CacheManager) |
axelix-conditions | Отчёт об условиях автоконфигурации |
axelix-configprops | @ConfigurationProperties |
axelix-env | Окружение и источники свойств |
axelix-feign | Feign-клиенты (при наличии Feign в classpath) |
axelix-gc | Сборка мусора |
axelix-heap-dump | Heap dump |
axelix-loggers | Уровни логирования |
axelix-metrics | Метрики |
axelix-scheduled-tasks | Запланированные задачи |
axelix-thread-dump | Thread dump |
axelix-dependencies | SBOM зависимостей |
Эндпоинты, неприменимые к вашему сервису, остаются неактивными — стартер активирует каждый только при выполнении его
предусловий (например, axelix-feign без Feign в classpath или axelix-caches без CacheManager не поднимаются).
Начиная с Axelix 1.2.0 стандартные эндпоинты health и info больше не требуются, поэтому стартер сам их не
открывает (до 1.2.0 Axelix зависел от них, и стартер принудительно открывал оба). Открытыми будут только эндпоинты,
перечисленные вами в management.endpoints.web.exposure.include, плюс эндпоинты Axelix — добавьте health и info в
список сами, когда они вам нужны, в том числе health, который Spring Boot иначе открыл бы по умолчанию.
Добавление собственных эндпоинтов
Если вам нужны свои actuator-эндпоинты, просто перечислите только их — стартер смёржит ваш список со своим, а не заменит его.
management:
endpoints:
web:
exposure:
include:
- prometheusВ результате будет выставлен prometheus и все эндпоинты Axelix.
Значение * тоже поддерживается — тогда открывается всё, и стартер список не трогает.
Открытие эндпоинтов на Axelix ниже 1.2.0
Стартеры старше 1.2.0 не добавляют свои эндпоинты в список открытых самостоятельно, поэтому каждый эндпоинт Axelix,
который должен читать Master, нужно перечислить в management.endpoints.web.exposure.include вручную. Как минимум
откройте axelix-metadata — без него инстанс никогда не появится в Master, — а на практике весь набор, чтобы у
каждого раздела UI были данные. Эндпоинты health и info эти версии стартера открывают принудительно сами, так что
их перечислять не нужно:
management:
endpoints:
web:
exposure:
include:
- axelix-metadata
- axelix-beans
- axelix-caches
- axelix-conditions
- axelix-configprops
- axelix-details
- axelix-env
- axelix-feign
- axelix-gc
- axelix-heap-dump
- axelix-loggers
- axelix-metrics
- axelix-scheduled-tasks
- axelix-thread-dumpЭкспорт метрик Axelix через Micrometer
Actuator-эндпоинт axelix-metrics нужен для пользовательского интерфейса Axelix. Кроме того, Axelix Spring Boot Starter
может публиковать небольшой набор Axelix-специфичных метрик в MeterRegistry вашего приложения.
Этот путь экспорта включается автоматически, когда в приложении есть бин MeterRegistry. Отдельного свойства Axelix
для включения данного функционала нет. Стартер регистрирует такие метрики:
| Метрика | Тип | Теги | Значение |
|---|---|---|---|
axelix_transaction_duration | Timer | class, method | Длительность каждого мониторируемого выполнения @Transactional. Таймер также публикует перцентили 0.5, 0.95 и 0.99. |
axelix_transaction_queries | Counter | class, method | Общее количество SQL-запросов, выполненных внутри мониторируемых транзакций. |
axelix_transaction_external_calls | Counter | class, method | Общее количество внешних вызовов (например, RestTemplate), сделанных внутри мониторируемых транзакций. |
axelix_cache_requests | Counter | cache, result | Общее количество обращений к кэшу, записанных Axelix-enhanced кэшами. |
axelix_cache_enabled | Gauge | cache | Текущее runtime-состояние каждого enhanced-кэша: 1, когда кэш включён, и 0, когда выключен. |
Эти метрики дополняют UI-ориентированные actuator-эндпоинты, а не заменяют их. Пользовательский интерфейс по-прежнему
читает axelix-metrics, axelix-caches и axelix-transactions-monitoring.
Поделитесь JWT-ключом подписи с Master
Каждый Axelix actuator-эндпоинт контролируется JwtAuthorizationFilter. Фильтр ожидает токен HS256, HS384 или HS512,
подписанный тем же ключом, который использует Master, поэтому обе стороны должны согласовать алгоритм и секретный ключ.
Используйте то же значение, которое вы указали для axelix.master.auth.jwt.signing-key на Master.
axelix:
sbs:
auth:
jwt:
algorithm: HMAC512
signing-key: ${AXELIX_JWT_SIGNING_KEY}
duration: 5malgorithm и signing-key обязательны — старт сервиса упадёт с понятным сообщением, если любого из них не хватает.
duration определяет, как долго действителен выпущенный стартером токен для heartbeat-сигналов саморегистрации, по
умолчанию он равен пяти минутам, после чего стартер автоматически его ротирует.
Ключ подписи, общий для Master и каждого мониторируемого сервиса, — конфиденциальный секрет. Инжектируйте его через переменную окружения, монтируемый файл или менеджер секретов, а не через YAML, закоммиченный в репозиторий.
Дайте Master найти сервис
Выберите один из двух предложенных ниже вариантов. На практике они исключают друг друга — саморегистрация только увеличивает задержку, если Master уже может просканировать среду.
Вариант A — автоматическое обнаружение на стороне Master
Если Master работает в кластере Kubernetes вместе с вашими сервисами, проще всего настроить его так, чтобы он сканировал
namespace в поисках Services и опрашивал /actuator/axelix-metadata каждого из них. На стороне стартера не требуется
никакой дополнительной настройки, помимо открытия actuator-эндпоинтов и общего JWT-ключа подписи. Настройте сканирование
на стороне Master через axelix.master.discovery.auto.* — см. Обнаружение —
автообнаружение на странице Master.
Вариант B — Саморегистрация
Если Master не может просканировать среду сервиса — другой кластер, обычная виртуальная машина, изолированная сеть —
включите саморегистрацию в стартере. Сервис тогда отправляет в Master heartbeat со своим actuator URL через
фиксированный интервал. Master принимает запрос по адресу POST /api/internal/service/register — это же значение
указывается в axelix.sbs.discovery.master-url.
axelix:
sbs:
discovery:
self-registration: true
master-url: http://master.internal:8080/api/internal/service/register
instance-actuator-url: http://my-app.internal:8080/actuator
instance-name: orders-service
heartbeat-interval: 15sНесколько деталей, на которых люди спотыкаются:
instance-actuator-url— это базовый URL-адрес сервиса, поскольку Master будет обращаться к нему из своей собственной сети — только по имени хоста и порту.master-url— это полный URL-адрес, включая/api/internal/service/register. Стартер отправляет его без изменений.instance-name— это имя, которое Master показывает для этого сервиса в пользовательском интерфейсе и в MCP-ответах. Выбирайте имя, которое переживает рестарты и реплики, — как правило, имя сервиса, а не имя пода.- Саморегистрация принимается Master из коробки (
axelix.master.discovery.self-registration.enabledпо умолчаниюtrue), установите её вfalse, если хотите отказаться от heartbeat-сигналов. Master выселяет сервис послеaxelix.master.discovery.self-registration.eviction.heartbeat-timeoutмолчания (по умолчанию45s), поэтому держитеheartbeat-intervalс запасом меньше этого значения.
Маскирование чувствительных значений свойств
Эндпоинты Axelix axelix-env и axelix-configprops возвращают значения свойств в Master. Чтобы секреты не утекали при
обычных просмотрах, стартер маскирует значения, которые он возвращает вызывающим без соответствующего полномочия.
Механизм одинаков для обоих эндпоинтов и управляется одним свойством стартера:
axelix.sbs.endpoints.config.sanitized-properties
- Пустой список (по умолчанию) — каждое значение, возвращаемое
axelix-envиaxelix-configprops, заменяется на******для вызывающих без соответствующего полномочия. По умолчанию выбран намеренно консервативный вариант: чтобы быть в безопасности, ничего включать не нужно. - Непустой список — маскируются только перечисленные ключи, всё остальное возвращается вызывающему без изменений. Используйте этот режим, если консервативное поведение по умолчанию слишком агрессивное и вы хотите маскировать только конкретные ключи (пароли, токены, ключи подписи).
Полномочие проверяется по каждому эндпоинту отдельно:
axelix-env— полномочиеENV_VALUES_READпозволяет вызывающему видеть исходные значения.axelix-configprops— полномочиеCONFIG_PROPS_VALUES_READпозволяет вызывающему видеть исходные значения.
Оба полномочия выдаются встроенными в Master ролями ADMIN и SUPER_ADMIN. VIEWER и EDITOR всегда проходят через
функцию маскирования. Полную матрицу см. в Роли и
полномочия.
axelix:
sbs:
endpoints:
config:
sanitized-properties:
- database.password
- spring.datasource.password
- jwt.signing-keyСтандартные переключатели маскирования Spring Boot Actuator — management.endpoint.env.show-values,
management.endpoint.env.keys-to-sanitize и их эквиваленты для configprops — не учитываются.
Справочник по конфигурации
Все свойства стартера живут в пространстве имён axelix.sbs.*.
Отключение стартера
axelix.sbs.enabled — глобальный переключатель всего стартера. По умолчанию он равен true, то есть достаточно
добавить зависимость, чтобы активировать всё описанное на этой странице. Установите его в false — и каждая
автоконфигурация Axelix отключится: не будет ни Axelix actuator-эндпоинтов, ни фильтра JWT-авторизации, ни
heartbeat-сигналов саморегистрации, ни метрик Micrometer, ни мониторинга транзакций. Приложение запустится так, как
будто стартера нет в classpath, при этом сама зависимость остаётся в сборке.
Этот переключатель пригодится, когда нужно выключить Axelix в конкретном окружении — например, локально или в тестовом профиле — не поддерживая отдельный набор зависимостей. Кроме того, это быстрый способ исключить стартер из подозреваемых при диагностике проблем на старте приложения.
axelix:
sbs:
enabled: falseСвойство читается один раз — при старте. Поэтому, чтобы изменение вступило в силу, приложение нужно перезапустить.
При выключенном стартере Master теряет сервис из виду: запросы автоматического обнаружения к
/actuator/axelix-metadata перестают отвечать, heartbeat-сигналы саморегистрации прекращаются, и сервис исчезает из UI
и из ответов MCP.
| Свойство | По умолчанию | Описание |
|---|---|---|
axelix.sbs.enabled | true | Глобальный переключатель всего стартера. Установите в false, чтобы отключить каждую автоконфигурацию Axelix. Ведёт себя одинаково в стартерах для Spring Boot 2, 3 и 4. |
Аутентификация — JWT
| Свойство | По умолчанию | Описание |
|---|---|---|
axelix.sbs.auth.jwt.algorithm | (не задано) обязательное | Алгоритм подписи. Один из HMAC256, HMAC384 или HMAC512. Должен совпадать с axelix.master.auth.jwt.algorithm на Master. |
axelix.sbs.auth.jwt.signing-key | (не задано) обязательное | Общий секрет, которым проверяются выпущенные Master токены и подписываются heartbeat-сигналы саморегистрации. Должен совпадать с ключом подписи Master. |
axelix.sbs.auth.jwt.duration | 5m | Срок действия токена саморегистрации, который стартер выпускает сам себе. Токены автоматически ротируются до истечения. |
Саморегистрация
Саморегистрация выключена по умолчанию (axelix.sbs.discovery.self-registration=false) — оставьте всё как есть, если Master
может найти сервис через автообнаружение на стороне Master.
Когда axelix.sbs.discovery.self-registration=true, следующие свойства становятся обязательными:
axelix.sbs.discovery.master-urlaxelix.sbs.discovery.instance-actuator-urlaxelix.sbs.discovery.instance-name
Приёмник этих heartbeat-сигналов на стороне Master — эндпоинт, таймаут выселения, расписание подметания выселений —
описан на странице Master в Обнаружение —
саморегистрация. JWT-ключ подписи, заданный в
axelix.sbs.auth.jwt.signing-key, должен совпадать с axelix.master.auth.jwt.signing-key на Master, иначе
heartbeat-сигналы будут отклоняться с 401.
| Свойство | По умолчанию | Описание |
|---|---|---|
axelix.sbs.discovery.self-registration | false | Главный переключатель. Установите true, чтобы включить саморегистрацию; оставьте false, чтобы полагаться на автообнаружение на стороне Master. |
axelix.sbs.discovery.master-url | (не задано) обязательное | Полный URL-адрес эндпоинта саморегистрации на Master, например http://master:8080/api/internal/service/register. Обязательно при self-registration=true. |
axelix.sbs.discovery.instance-actuator-url | (не задано) обязательное | Базовый URL-адрес этого сервиса, доступный из Master (необходимо указать постфикс /actuator). Обязательно при self-registration=true. |
axelix.sbs.discovery.instance-name | (не задано) обязательное | Отображаемое имя, показываемое в Axelix UI и в MCP-ответах. Обязательно при self-registration=true. |
axelix.sbs.discovery.heartbeat-interval | 15s | Интервал между heartbeat-сигналами. Должен быть меньше heartbeat-timeout выселения на Master. |
Маскирование значений в эндпоинтах
| Свойство | По умолчанию | Описание |
|---|---|---|
axelix.sbs.endpoints.config.sanitized-properties | (пустой список) | Ключи свойств, чьи значения маскируются как ****** для вызывающих без ENV_VALUES_READ (для axelix-env) или CONFIG_PROPS_VALUES_READ (для axelix-configprops). Пустой список означает, что маскируются все значения. См. Маскирование чувствительных значений свойств для правил сопоставления. |
Мониторинг транзакций
Мониторинг транзакций — это то, что обеспечивает работу страницы «Мониторинг транзакций» и связанных метрик. Под капотом
стартер оборачивает ваши @Transactional методы (путем обычного проксирования) с целью сбора различного рода инсайтов, случившихся в
транзакции. Собранные инсайты передаются в Master внутри метаданных регистрации сервиса (которые отправляются либо в момент heartbeat
в случае саморегистрации, либо сканируются Master-ом в момент автоматического обнаружения), поэтому отдельный actuator-эндпоинт для этого не требуется.
Эта функция включена по умолчанию, как только стартер оказывается в classpath.
Несмотря на то, что overhead от этого проксирования крайне небольшой, если вдруг вы захотите отключить
этот функционал - это можно сделать. Установите значение свойства axelix.sbs.transaction.monitoring.enabled в false,
чтобы полностью её отключить — без bean post-processor'ов, без проксирования источника данных, без фильтра очистки и без интегратора Hibernate.
axelix:
sbs:
transaction:
monitoring:
enabled: false| Свойство | По умолчанию | Описание |
|---|---|---|
axelix.sbs.transaction.monitoring.enabled | true | Главный переключатель мониторинга транзакций. Установите false, чтобы вся автоконфигурация мониторинга транзакций отключилась. Работает одинаково на стартерах Spring Boot 2, 3 и 4. |
Отключение мониторинга транзакций также отключает описанное ниже обнаружение in-memory pagination, поскольку это обнаружение является частью той же автоконфигурации.
Обнаружение in-memory pagination
Обнаруживает случаи применения in-memory pagination, выполняемые Hibernate при использовании методов setFirstResult/setMaxResults совместно с выборкой коллекций через fetch.
По умолчанию мониторинг транзакций регистрирует appender, который перехватывает предупреждения Hibernate (HHH000104 в Hibernate 5.x и HHH90003004 в Hibernate 6.x–7.3.x). Стартер выбирает appender в соответствии с активной системой логирования приложения, поэтому обнаружение работает как на Logback, так и на Log4j2:
- Logback — стартер регистрирует
com.axelixlabs.axelix.sbs.spring.core.persistence.hibernate.pagination.LogbackInMemoryPaginationAppender. Так происходит в стандартной конфигурации Spring Boot, где системой логирования является Logback. - Log4j2 — если приложение использует Log4j2 (обычно после добавления
spring-boot-starter-log4j2и исключения стандартного стартера Logback), стартер регистрируетcom.axelixlabs.axelix.sbs.spring.core.persistence.hibernate.pagination.Log4j2InMemoryPaginationAppender.
Выбирать между ними не нужно — стартер сам определяет активную систему логирования и регистрирует подходящий appender.
Установите значение свойства axelix.sbs.transaction.monitoring.in-memory-pagination-detection.enabled в false, если
хотите отключить регистрацию любого из этих appender-ов.
axelix:
sbs:
transaction:
monitoring:
in-memory-pagination-detection:
enabled: falseСм. также
- Настройка плагина сборки — вторая половина подключения сервиса; обязательна для регистрации сервиса.
- Настройка Master — где задаются ключ подписи, таймаут выселения и сканирование Kubernetes.
- Что такое Master? — фон того, как Master использует данные, которые публикует стартер.
- Аутентификация — углублённый взгляд на JWT и резолюцию полномочий с обеих сторон.
Настройка Master
На этой странице показано, как запустить Axelix Master в вашей среде. Выберите формат, который соответствует тому, как вы предоставляете доступ к остальным своим сервисам: автономный JAR-файл, Docker-контейнер, стек Docker Compose или развёртывание в Kubernetes.
Настройка плагина сборки Axelix
При использовании плагина Axelix для сборки координаты сборки записываются в артефакт, чтобы Axelix Master мог идентифицировать экземпляр.