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如何一起使用?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 JOOQ 和 Spring-boot 2.0 进行手动事务管理?
Flyway 在 Spring Boot 上不工作时如何调试?
如何使用 Spring-Boot config 配置 JOOQ 设置?