azerphoenix
@azerphoenix
Java Software Engineer

Как генерировать соурсы jOOQ, когда БД тоже в Docker?

jooq при старте приложения генерирует соурсы и добавляет их в target.
Весь стэк поднимается в docker compose (БД в том числе). Будет ли доступна БД при старте приложения, чтобы можно было сгенерировать соурсы для jOOQ?
Другой вопрос, как передать значения переменной окружения для конфигурации jooq, чтобы она была доступна в докере?
Пробовал следующие варианты - объявляю args внутри build. Пробовал через environment. А внутри pom.xml уже получаю значение переменной таким образом `${env.XXX}`
  • Вопрос задан
  • 86 просмотров
Решения вопроса 1
azerphoenix
@azerphoenix Автор вопроса
Java Software Engineer
Ситуация была в следующем.
Плагин jOOQ срабатывает на этапе `mvn clean package`. Так как на данном этапе в docker compose образы хоть и собраны, но контейнер БД не стартовал, то этап сборки приложения не сработает (connection refused to db).
Почему healthcheck & depends_on не подошли в данном случае:
Так как они сработают в случае, если контейнеры стартовали. К тому же, depends_on не гарантирует то, что стартанет сервис. Он гарантирует, что стартанер контейнер.
Решил проблему следующим образом. В docker compose первоначально выборочно собираю нужные образы и стартую нужные сервисы (БД в том числе). Затем уже собираю образ приложения и стартую приложение.
Т.е. примерно так:
Этап 1
`docker compose up postgres rabbit redis -d`
Этап 2
`docker compose up app -d`

Есть альтернативное решение, тоже хорошее.
Генерация сущности после того, как приложение стартовало при помощи AfterStartupApplicationListener
Подробности тут - https://habr.com/ru/articles/488522/
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Maksclub
@Maksclub
maksfedorov.ru
Будет ли доступна БД при старте приложения, чтобы можно было сгенерировать соурсы для jOOQ?

Если docker-compose, то можно healthcheck сделать и переподнимать, пока не будет доступно
таже можно настроить переподнятие, если контейнер с приложением зафейлится... а если он при поднятии првоеряет переменные окружения, то будет фейл

Пробовал следующие варианты - объявляю args внутри build. Пробовал через environment. А внутри pom.xml уже получаю значение переменной таким образом `${env.XXX}`

у вас docker-compose есть?
там можно в секции environments указать
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы