Как использовать Spring boot, JOOQ и Flyway вместе?

Итак, давайте рассмотрим общее Spring boot приложение, которое использует JOOQ для доступа к базе данных и Flyway для миграции базы данных. Проект использует gradle для управления зависимостями.

Я хочу следующие вещи:

  1. Run my application in docker. So, I want to use only in environment variables (https://12factor.net/config). Следовательно, я не знаю, как настроить свойства приложения весенней загрузки обе (логин и пароль базы данных) и логин и пароль базы данных плагина Gradle JOOQ.
  2. Автоматическая генерация классов JOOQ. Миграция Flyway запускается при запуске приложения. Но JOOQ генерирует код в задаче gradle build. Итак, мы видим неверный порядок выполнения задач.
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
4
0
1 468
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

У меня очень похожая установка, но я прибегал к ручному действию для создания классов Jooq. Мне они нужны для разработки, поэтому затягивать генерацию до целевой среды мне нет смысла.

Я решил запустить локальный дБ для целей разработки. Я запускаю его в докере, но это деталь всей настройки.

Когда у меня есть новая миграция, я запускаю ее с помощью плагина класса flyway против локального дБ. Затем я регенерирую классы Jooq с плагином Grade Jooq.

Когда приложение развертывается в целевой среде, я полагаюсь на flyway для запуска миграции при запуске. У меня есть соответствующие классы Jooq, поэтому все работает гладко.

привет, я прав, что вы передаете классы JOOQ в git?

Max 20.04.2019 18:40

Да, я коммичу их после добавления каждого файла миграции (и, честно говоря, меня это не беспокоит). Дополнительный дБ на локальном ПК — это немного больно, но я научился с этим жить.

Lesiak 20.04.2019 18:51

Спасибо. Су, ты мне почти нравишься. Я подумал, что есть еще какой-нибудь классный способ.

Max 20.04.2019 19:06

Я был бы рад найти лучший, поэтому, пожалуйста, поделитесь в этой теме, если вам случится найти его.

Lesiak 20.04.2019 19:23

Я слежу за этим github.com/jOOQ/jOOQ/issues/6551#issuecomment-481305842

Max 20.04.2019 19:53

если вы используете gradle, вы также можете использовать: github.com/ayedo/jooq-modelator

Ynv 30.03.2020 20:42

В проекте jOOQ GitHub есть пример проекта, который использует jOOQ с Spring Boot и sql-maven-plugin.

Вы можете легко заменить sql-maven-plugin плагином Flyway, как показано в пример проекта jOOQ/Flyway или этот пост в блоге.

В связи с этим, если вы используете один из коммерческих дистрибутивов jOOQ с Spring Boot, это задокументировано в этом сообщении в блоге здесь.

Существует следующая задача gradle, для которой требуются драйверы flyway, otj-pg-embedded, jooq и postgresql:

import com.opentable.db.postgres.embedded.*
import org.flywaydb.core.*
import org.jooq.codegen.*

tasks.named("compileKotlin") {
    doFirst {
        //create embedded postgresql
        EmbeddedPostgres.builder().setPort(5400).start().use {
            //migrate embedded posrtgresql
            Flyway.configure()
                .locations("filesystem:$projectDir/migrations/")
                .schemas("public")
                .dataSource(it.postgresDatabase)
                .load()
                .migrate()

            //generate jooq classes
            GenerationTool.generate("some xml for jooq")
        }
    }
}

Источник: https://gist.github.com/whyoleg/63195b60eb85e8fe2114b30f28b892ef.

Другие вопросы по теме