簡體   English   中英

Spring boot、JOOQ、Flyway如何搭配使用?

[英]How to use Spring boot, JOOQ and Flyway together?

那么,讓我們考慮一個通用的Spring boot應用程序,它使用JOOQ進行數據庫數據庫訪問,使用Flyway進行數據庫遷移。 項目使用gradle進行依賴管理。

我想要以下東西:

  1. 在 docker 中運行我的應用程序。 所以,我只想在環境變量中使用( https://12factor.net/config )。 因此,我不知道如何配置 spring boot 應用程序屬性(數據庫登錄名密碼)和 gradle JOOQ 插件數據庫登錄名和密碼。
  2. 自動生成 JOOQ 類。 Flyway 遷移在應用程序啟動時運行。 但是 JOOQ 在gradle build任務中生成代碼。 所以,我們看到錯誤的任務執行順序。

我有一個非常相似的設置,但采用手動操作來生成 Jooq 類。 我需要它們進行開發,所以將生成延遲到目標環境對我來說沒有意義。

我決定運行一個本地 dB 用於開發目的。 我在 docker 中運行它,但這是整個設置中的一個細節。

當我有一個新的遷移時,我使用 flyway grade 插件針對本地 dB 運行它。 然后我用 grade Jooq 插件重新生成 Jooq 類。

當應用程序部署在目標環境中時,我依靠 flyway 在啟動時運行遷移。 我已經打包了匹配的 Jooq 類,所以一切都很順利。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM