Настройка 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.7.x (это жёсткий минимум, а не просто версия, на которой мы тестировали; собран и протестирован с использованием 2.7.18, Spring Cloud 2021.0.9, минимальная версия JDK 11).
    • com.axelixlabs:axelix-spring-boot-3-starter — Spring Boot 3.x (собран и протестирован с использованием 3.0.13, Spring Cloud 2022.0.4, минимальная версия JDK 17).
    • com.axelixlabs:axelix-spring-boot-4-starter — Spring Boot 4.x (собран и протестирован с использованием 4.0.6, Spring Cloud 2025.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.2.1. Проверьте Maven Central на актуальный опубликованный тег и используйте эту версию в своей сборке.

build.gradle.kts
dependencies {
    implementation("com.axelixlabs:axelix-spring-boot-4-starter:1.2.1")
}

Стартер также зависит от Spring Boot Actuator. Если в вашем сервисе ещё нет spring-boot-starter-actuator, добавьте его рядом.

Плагин сборки — отдельный шаг

Подключение плагина сборки Axelix обязательно для каждого управляемого сервиса, но оно вынесено в отдельный раздел — см. Что такое плагин сборки Axelix? и Настройка плагина сборки.

Транзитивные зависимости

Стартер устроен так, чтобы добавлять в ваш classpath как можно меньше. Всё, с чем он интегрируется, — Spring Boot, Actuator, Spring Kafka, Micrometer, Caffeine, Jackson — используется только при компиляции стартера и не подтягивается вместе с ним: стартер работает с тем, что уже есть в вашем сервисе. Транзитивно он приносит только следующие библиотеки:

ЗависимостьЗачем она нужна
org.slf4j:slf4j-apiЛогирование. Уже есть в любом приложении на Spring Boot.
io.jsonwebtoken:jjwt-api, jjwt-impl, jjwt-jacksonПроверка JWT, который Master отправляет с каждым запросом.

Этот список будет сокращаться. Стартер — единственный компонент Axelix, который работает внутри ваших сервисов, и каждая библиотека, которую он приносит, — это ещё одна зависимость в вашем classpath, которую нужно сканировать на уязвимости, обновлять и поддерживать совместимой с остальным приложением. Позиция core-команды Axelix такова: у стартера не должно быть внешних зависимостей вообще, и мы шаг за шагом убираем оставшиеся — за ходом работы можно следить в axelixlabs/axelix#1748.

JsonPath больше не подключается

ВыпущеноДоступно начиная с релиза: 1.2.0

До Axelix 1.1.x включительно стартер также подтягивал com.jayway.jsonpath:json-path, хотя сам его не использовал. Начиная с Axelix 1.2.0 эта зависимость удалена — это первый шаг к стартеру без внешних зависимостей, описанному в axelixlabs/axelix#1748.

Если ваш сервис использует JsonPath в собственном коде и получал его только через стартер Axelix, при обновлении объявите зависимость явно. Версией управляет Spring Boot, поэтому указывать её не нужно:

build.gradle.kts
dependencies {
    implementation("com.jayway.jsonpath:json-path")
}

Тесты это не затрагивает: spring-boot-starter-test подключает JsonPath самостоятельно.

JSpecify больше не подключается

ОжидаетсяПоявится в ближайшем минорном релизе

До Axelix 1.2.x включительно стартер также подтягивал org.jspecify:jspecify. Стартер использует JSpecify только ради аннотаций nullness, и нужны они ему только при компиляции. Начиная с Axelix 1.3.0 эта зависимость удалена — это следующий шаг к стартеру без внешних зависимостей, описанному в axelixlabs/axelix#1748.

Стартер продолжает работать без JSpecify в classpath, потому что JVM игнорирует аннотации, классы которых отсутствуют во время выполнения. На Spring Boot 4 ничего не меняется вовсе: Spring Framework 7 сам зависит от JSpecify.

Если ваш собственный код использует аннотации JSpecify и получал их только через стартер Axelix, при обновлении объявите зависимость явно. Spring Boot 2 и 3 не управляют её версией, поэтому укажите её:

build.gradle.kts
dependencies {
    implementation("org.jspecify:jspecify:1.0.0")
}

Actuator-эндпоинты

Начиная с Axelix 1.2.0 ничего настраивать вручную не нужно: стартер сам добавляет свои actuator-эндпоинты в management.endpoints.web.exposure.include при старте приложения, поэтому Master получает к ним доступ «из коробки». На более старых версиях стартер этого не делает, и эндпоинты нужно перечислить вручную — см. Открытие эндпоинтов на Axelix ниже 1.2.0.

Что открывает стартер

Стартер выставляет следующие эндпоинты:

ЭндпоинтНазначениеС версии
axelix-metadata обязательныйМетаданные сервиса; Master опрашивает его первым1.0.0
axelix-detailsСводная информация об инстансе1.0.0
axelix-beansБины контекста1.0.0
axelix-cachesКэши (при наличии CacheManager)1.0.0
axelix-conditionsОтчёт об условиях автоконфигурации1.0.0
axelix-configprops@ConfigurationProperties1.0.0
axelix-envОкружение и источники свойств1.0.0
axelix-feign устаревшийFeign-клиенты (при наличии Feign в classpath). Удалён в 1.3.0, см. ниже1.0.0
axelix-gcСборка мусора1.0.0
axelix-heap-dumpHeap dump1.0.0
axelix-loggersУровни логирования1.0.0
axelix-logsПоследние записи лога1.3.0 скоро
axelix-metricsМетрики1.0.0
axelix-scheduled-tasksЗапланированные задачи1.0.0
axelix-thread-dumpThread dump1.0.0
axelix-dependenciesSBOM зависимостей1.2.0

В колонке С версии указан релиз стартера Axelix, в котором эндпоинт появился впервые. 1.0.0 — первый релиз Axelix, то есть эндпоинт с такой отметкой существует с самого начала. Версия с пометкой скоро ещё не выпущена: эндпоинт станет доступен в следующем релизе Axelix — минорном или мажорном, смотря какой выйдет раньше.

Эндпоинты, неприменимые к вашему сервису, остаются неактивными — стартер активирует каждый только при выполнении его предусловий (например, axelix-caches без CacheManager не поднимается).

Начиная с Axelix 1.2.0 стандартные эндпоинты health и info больше не требуются, поэтому стартер сам их не открывает (до 1.2.0 Axelix зависел от них, и стартер принудительно открывал оба). Открытыми будут только эндпоинты, перечисленные вами в management.endpoints.web.exposure.include, плюс эндпоинты Axelix — добавьте health и info в список сами, когда они вам нужны, в том числе health, который Spring Boot иначе открыл бы по умолчанию.

Эндпоинт axelix-feign удалён

ОжидаетсяПоявится в ближайшем минорном релизе

До Axelix 1.2.x включительно стартеры для Spring Boot 3 и Spring Boot 4 добавляли ещё и эндпоинт axelix-feign, который возвращал список клиентов Spring Cloud OpenFeign вашего сервиса. Axelix Master ни разу не использовал его для отображения чего-либо, и эндпоинт оставался лишь наследием ранних дней проекта. Начиная с Axelix 1.3.0 эндпоинт удалён из стартеров — вместе со всем, что в Master умело его вызывать.

При обновлении ничего делать не нужно. Единственное видимое отличие: /actuator/axelix-feign больше не существует на сервисе со стартером 1.3.0 и новее, поэтому, если ваши собственные инструменты обращаются к этому URL напрямую, они получат 404. Если вы перечисляете эндпоинты Axelix в management.endpoints.web.exposure.include вручную и axelix-feign есть в этом списке, его можно убрать — оставить его там безвредно.

Добавление собственных эндпоинтов

Если вам нужны свои actuator-эндпоинты, просто перечислите только их — стартер смёржит ваш список со своим, а не заменит его.

management:
  endpoints:
    web:
      exposure:
        include:
          - prometheus

В результате будет выставлен prometheus и все эндпоинты Axelix.

Значение * тоже поддерживается — тогда открывается всё, и стартер список не трогает.

Открытие эндпоинтов на Axelix ниже 1.2.0

УстарелоАктуально только до релиза: 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-gc
          - axelix-heap-dump
          - axelix-loggers
          - axelix-metrics
          - axelix-scheduled-tasks
          - axelix-thread-dump

Эти версии стартера также добавляют устаревший эндпоинт axelix-feign. В список он не включён намеренно: Master его никогда не читает, а в Axelix 1.3.0 эндпоинт удалён — см. раздел Что открывает стартер.

Экспорт метрик Axelix через Micrometer

Actuator-эндпоинт axelix-metrics нужен для пользовательского интерфейса Axelix. Кроме того, Axelix Spring Boot Starter может публиковать небольшой набор Axelix-специфичных метрик в MeterRegistry вашего приложения.

Этот путь экспорта включается автоматически, когда в приложении есть бин MeterRegistry. Отдельного свойства Axelix для включения данного функционала нет. Стартер регистрирует такие метрики:

МетрикаТипТегиЗначение
axelix_transaction_durationTimerclass, methodДлительность каждого мониторируемого выполнения @Transactional. Таймер также публикует перцентили 0.5, 0.95 и 0.99.
axelix_transaction_queriesCounterclass, methodОбщее количество SQL-запросов, выполненных внутри мониторируемых транзакций.
axelix_transaction_external_callsCounterclass, methodОбщее количество внешних вызовов (например, RestTemplate), сделанных внутри мониторируемых транзакций.
axelix_cache_requestsCountercache, resultОбщее количество обращений к кэшу, записанных Axelix-enhanced кэшами.
axelix_cache_enabledGaugecacheТекущее 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: 5m

duration определяет, как долго действителен выпущенный стартером токен для heartbeat-сигналов саморегистрации, по умолчанию он равен пяти минутам, после чего стартер автоматически его ротирует.

Ключ подписи, общий для Master и каждого мониторируемого сервиса, — конфиденциальный секрет. Инжектируйте его через переменную окружения, монтируемый файл или менеджер секретов, а не через YAML, закоммиченный в репозиторий.

Запуск без ключа подписи

ВыпущеноДоступно начиная с релиза: 1.2.0

Начиная с Axelix 1.2.0, algorithm и signing-key необязательны. Если они не заданы, стартер использует HMAC512 и тот же встроенный ключ, что и Master по умолчанию, поэтому сервис подключается к Master с настройками по умолчанию без настройки ключа. Пока используется встроенный ключ, стартер при старте пишет в лог предупреждение.

Встроенный ключ общеизвестен. Любой, у кого есть доступ к actuator-эндпоинтам сервиса, может подписать им токен и вызвать эндпоинты Axelix, например прочитать окружение или снять heap dump. Задайте собственный axelix.sbs.auth.jwt.signing-key, такой же, как в Master, прежде чем использовать Axelix не только для локального знакомства.

Дайте 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:2935/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. Стартер отправляет его без изменений. Начиная с Axelix 1.2.0 Master по умолчанию слушает порт 2935; до этого релиза портом по умолчанию был 8080 — см. Общие настройки.
  • 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.*.

Отключение стартера

ВыпущеноДоступно начиная с релиза: 1.2.0

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.enabledtrueГлобальный переключатель всего стартера. Установите в false, чтобы отключить каждую автоконфигурацию Axelix. Ведёт себя одинаково в стартерах для Spring Boot 2, 3 и 4.

Аутентификация — JWT

СвойствоПо умолчаниюОписание
axelix.sbs.auth.jwt.algorithmHMAC512 (с 1.2.0, раньше обязательно)Алгоритм подписи. Один из HMAC256, HMAC384 или HMAC512. Должен совпадать с axelix.master.auth.jwt.algorithm на Master.
axelix.sbs.auth.jwt.signing-keyвстроенный ключ (с 1.2.0, раньше обязательно)Общий секрет, которым проверяются выпущенные Master токены и подписываются heartbeat-сигналы саморегистрации. Должен совпадать с ключом подписи Master.
axelix.sbs.auth.jwt.duration5mСрок действия токена саморегистрации, который стартер выпускает сам себе. Токены автоматически ротируются до истечения.

Саморегистрация

Саморегистрация выключена по умолчанию (axelix.sbs.discovery.self-registration=false) — оставьте всё как есть, если Master может найти сервис через автообнаружение на стороне Master.

Когда axelix.sbs.discovery.self-registration=true, следующие свойства становятся обязательными:

  • axelix.sbs.discovery.master-url
  • axelix.sbs.discovery.instance-actuator-url
  • axelix.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-registrationfalseГлавный переключатель. Установите true, чтобы включить саморегистрацию; оставьте false, чтобы полагаться на автообнаружение на стороне Master.
axelix.sbs.discovery.master-url(не задано) обязательноеПолный URL-адрес эндпоинта саморегистрации на Master, например http://master:2935/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-interval15sИнтервал между heartbeat-сигналами. Должен быть меньше heartbeat-timeout выселения на Master.

Маскирование значений в эндпоинтах

СвойствоПо умолчаниюОписание
axelix.sbs.endpoints.config.sanitized-properties(пустой список)Ключи свойств, чьи значения маскируются как ****** для вызывающих без ENV_VALUES_READ (для axelix-env) или CONFIG_PROPS_VALUES_READ (для axelix-configprops). Пустой список означает, что маскируются все значения. См. Маскирование чувствительных значений свойств для правил сопоставления.

Управление кэшами

ВыпущеноДоступно начиная с релиза: 1.2.0

Управление кэшами - это то, что обеспечивает работу страницы «Кэши» и метрик axelix_cache_*. Под капотом стартер оборачивает каждый бин CacheManager вашего приложения в прокси, который записывает обращения к кэшам и позволяет включать, выключать и очищать кэши во время работы приложения, а данные отдаёт через actuator-эндпоинт axelix-caches.

Эта функция включена по умолчанию, как только стартер оказывается в classpath.

Установите значение свойства axelix.sbs.cache.management.enabled в false, чтобы полностью её отключить, без проксирования CacheManager, без эндпоинта axelix-caches и без метрик кэшей. Ваши бины CacheManager при этом остаются ровно такими, какими их определило ваше приложение.

axelix:
  sbs:
    cache:
      management:
        enabled: false
СвойствоПо умолчаниюОписание
axelix.sbs.cache.management.enabledtrueГлавный переключатель управления кэшами. Установите false, чтобы вся автоконфигурация управления кэшами отключилась. Работает одинаково на стартерах Spring Boot 2, 3 и 4.

При отключённом управлении кэшами странице «Кэши» в Master нечего показывать для этого сервиса, а MCP-инструменты для кэшей завершаются для него ошибкой.

Записи логов

ОжидаетсяПоявится в ближайшем минорном релизе

Эндпоинт axelix-logs отдаёт последние записи логов вашего приложения, поэтому их можно прочитать без доступа к хосту. Стартер хранит эти записи в памяти с момента запуска приложения. Когда буфер заполнен, каждая новая запись вытесняет самую старую. Поскольку буфер находится в памяти, после перезапуска он снова пуст.

По умолчанию стартер хранит последние 1000 записей. Увеличьте axelix.sbs.logs.max-entries, если нагруженный сервис пишет столько логов, что 1000 записей покрывают лишь несколько секунд. Уменьшите значение, если памяти мало: каждая хранимая запись остаётся в куче.

axelix:
  sbs:
    logs:
      max-entries: 5000
СвойствоПо умолчаниюОписание
axelix.sbs.logs.max-entries1000Максимальное количество последних записей логов, которые стартер хранит в памяти. Должно быть больше 0.

Стартер проверяет значение после запуска приложения. Если оно равно 0 или отрицательное, запуск завершается ошибкой IllegalArgumentException с сообщением axelix.sbs.logs.max-entries must be positive.

Мониторинг транзакций

Мониторинг транзакций — это то, что обеспечивает работу страницы «Мониторинг транзакций» и связанных метрик. Под капотом стартер оборачивает ваши @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.enabledtrueГлавный переключатель мониторинга транзакций. Установите 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 и резолюцию полномочий с обеих сторон.

На этой странице