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

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

我想要以下东西:

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

【问题讨论】:

    标签: java spring spring-boot jooq flyway


    【解决方案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 projectthis 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

      【讨论】:

        猜你喜欢
        • 2020-08-01
        • 2020-04-14
        • 2015-11-23
        • 2023-03-26
        • 2019-04-19
        • 2015-05-29
        • 2019-08-07
        • 2018-10-07
        • 2015-07-12
        相关资源
        最近更新 更多