Общий процесс bootstrap¶
Назначение¶
Bootstrap выполняет первоначальную настройку установки до запуска обычных пользовательских сценариев. Это процесс уровня приложения, а не ответственность одного доменного модуля.
Сейчас процесс создаёт первого администратора ГК через iam::bootstrap. В будущем он может явно
вызывать bootstrap-контракты других модулей в требуемом порядке.
Изоляция от основного приложения¶
Проект разделён на общую библиотеку и два исполняемых Gradle-модуля:
app — доменные модули, persistence и Flyway migrations; не запускается самостоятельно
web — основное HTTP-приложение, scheduling и Quartz
cli — общий процесс bootstrap и будущие служебные команды
CLI-код расположен отдельно от web runtime:
cli/src/main/kotlin/ru/panampizza/monolith/bootstrap
├── BootstrapApplication
├── BootstrapCommand
└── BootstrapProperties
Он запускается единственной командой:
cli зависит от app, но не зависит от web и не содержит зависимостей на Spring Web и Quartz.
BootstrapApplication не использует MonolithApplication, component scan или web server. В его
контекст явно подключаются только Flyway, DataSource/JPA и bootstrap-конфигурации нужных модулей.
Поэтому команда не запускает HTTP, импорт iiko, scheduled-задачи и произвольные
ApplicationRunner основного приложения.
Подключение модулей¶
Модуль публикует отдельную техническую named interface, например:
BootstrapCommand вызывает контракты напрямую:
Автоматический поиск contributors намеренно не используется: список и порядок редких изменяющих операций должны быть видны в коде команды.
Чтобы добавить bootstrap другого модуля:
- Опубликовать
module::bootstrapс узким сценарием первоначальной настройки. - Подключить его configuration в
BootstrapApplication. - Добавить свойства с префиксом
$PROJECT_BOOTSTRAP_$MODULE_$ENTITY_$PROPERTY. - Добавить явный вызов в
BootstrapCommandи тест порядка/результата.
Gradle-модули и команды при этом не меняются.
Среды запуска¶
локально → task bootstrap
Docker Compose → одноразовый bootstrap service/profile
Kubernetes → однократный Job
Bootstrap запускается одним процессом. Одновременный запуск нескольких экземпляров не поддерживается, поскольку операция выполняется один раз за жизнь установки. Основной Deployment запускается отдельно и не содержит bootstrap-режима.
web и cli собираются в разные BootJar. Способ их упаковки в контейнерные образы будет
зафиксирован вместе с Dockerfile приложения.