Spring boot、JOOQ和Flyway如何一起使用?

Posted

技术标签:

【中文标题】Spring boot、JOOQ和Flyway如何一起使用?【英文标题】:How to use Spring boot, JOOQ and Flyway together? 【发布时间】:2019-09-10 08:28:57 【问题描述】:

所以,让我们考虑一个通用的Spring boot 应用程序,它使用JOOQ 进行数据库数据库访问,并使用Flyway 进行数据库迁移。项目使用gradle进行依赖管理。

我想要以下东西:

    在 docker 中运行我的应用程序。所以,我只想在环境变量中使用(https://12factor.net/config)。因此,我不知道如何配置 both spring boot 应用程序属性(数据库登录名和密码)和 gradle JOOQ 插件数据库登录名和密码。 自动生成 JOOQ 类。 Flyway 迁移在应用程序启动时运行。但是 JOOQ 在gradle build 任务中生成代码。因此,我们看到了错误的任务执行顺序。

【问题讨论】:

【参考方案1】:

我有一个非常相似的设置,但采用手动操作来生成 Jooq 类。 我需要它们进行开发,因此将生成延迟到目标环境对我来说是没有意义的。

出于开发目的,我决定运行本地 dB。 我在 docker 中运行它,但这是整个设置中的一个细节。

当我有一个新的迁移时,我使用 flyway 等级插件针对本地 dB 运行它。然后我使用 Grade Jooq 插件重新生成 Jooq 类。

当应用程序部署在目标环境中时,我依靠flyway在启动时运行迁移。我已经打包了匹配的 Jooq 类,所以一切都很顺利。

【讨论】:

你好,我是对的,你将 JOOQ 类提交到 git 吗? 是的,我在添加每个迁移文件后提交它们(坦率地说,我不觉得它令人不安)。在本地 PC 上增加 dB 有点痛苦,但我学会了忍受它。 谢谢。苏,我几乎喜欢你。我觉得还有更酷的方法。 我也很乐意找到更好的,所以如果你碰巧找到了,请在这个帖子中分享。 如果你使用的是gradle,也可以使用:github.com/ayedo/jooq-modelator【参考方案2】:

jOOQ GitHub 项目有一个 example project,它使用带有 Spring Boot 的 jOOQ 和 sql-maven-plugin

您可以使用 Flyway 插件轻松替换 sql-maven-plugin,如 jOOQ/Flyway example project 或 this blog post 中所示。

在相关说明中,如果您使用带有 Spring Boot 的 jOOQ 的商业发行版之一,则记录在 in this blog post here。

【讨论】:

【参考方案3】:

有如下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

【讨论】:

以上是关于Spring boot、JOOQ和Flyway如何一起使用?的主要内容,如果未能解决你的问题,请参考以下文章

如何一起使用Spring启动,JOOQ和Flyway?

如何使用 JOOQ 和 Spring-boot 2.0 进行手动事务管理?

Flyway 在 Spring Boot 上不工作时如何调试?

如何使用 Spring-Boot config 配置 JOOQ 设置?

如何使用 Spring Boot 和 Flyway 为 Quartz 调度程序设置数据库模式?

如何在具有 JDBC 安全性的 Spring Boot 中使用 Flyway?