使用 JOOQ 生成器的 Playframework Evolutions
Playframework Evolutions with JOOQ generator
我使用的项目使用 JOOQ
及其生成器从 Postgres
数据库生成 类。数据库演变由 Play Evolutions
管理。我们还使用 git
作为版本控制系统。当从 git
:
获取新的 evolutions/jooq 代码时,这组工具会导致某种自引用问题
无法应用由其他团队成员创建的新表的演变,因为这些表中没有生成 类 JOOQ
导致的编译问题。
我在考虑以下解决方案:
- 应用 sbt 的演变 - 创建 sbt 任务 - 到目前为止未能实施,
- 在数据库上手动应用演化(复制粘贴脚本)- 没有意义。
堆栈:
- PlayFramework 2.3.8
- Jooq 3.5.3
- Java 8
请指教
你可以写一个插件。
当应用程序启动时,插件应用演变。
我建议在编译之前使用 SBT 生成代码。
如果有一种简单的方法 bootstrap JOOQ 代码生成器(例如通过静态方法,或通过创建生成器实例),您可以看看 here查看如何创建 bootstrap 流程的任务。
然后,如果你想在编译之前执行 SBT 任务,你可以这样做(如果你要调用任务 generateJOOQ
):
compileInputs in (Compile, compile) <<= (compileInputs in (Compile, compile)) dependsOn (generateJOOQ in Compile)
拥有一个 JOOQ SBT 插件会让事情变得更容易,但我认为创建这样一个插件的维护工作不应被低估,因为需要迎合不同的 SBT 版本和 JOOQ 版本。
我使用的项目使用 JOOQ
及其生成器从 Postgres
数据库生成 类。数据库演变由 Play Evolutions
管理。我们还使用 git
作为版本控制系统。当从 git
:
无法应用由其他团队成员创建的新表的演变,因为这些表中没有生成 类 JOOQ
导致的编译问题。
我在考虑以下解决方案:
- 应用 sbt 的演变 - 创建 sbt 任务 - 到目前为止未能实施,
- 在数据库上手动应用演化(复制粘贴脚本)- 没有意义。
堆栈:
- PlayFramework 2.3.8
- Jooq 3.5.3
- Java 8
请指教
你可以写一个插件。 当应用程序启动时,插件应用演变。
我建议在编译之前使用 SBT 生成代码。
如果有一种简单的方法 bootstrap JOOQ 代码生成器(例如通过静态方法,或通过创建生成器实例),您可以看看 here查看如何创建 bootstrap 流程的任务。
然后,如果你想在编译之前执行 SBT 任务,你可以这样做(如果你要调用任务 generateJOOQ
):
compileInputs in (Compile, compile) <<= (compileInputs in (Compile, compile)) dependsOn (generateJOOQ in Compile)
拥有一个 JOOQ SBT 插件会让事情变得更容易,但我认为创建这样一个插件的维护工作不应被低估,因为需要迎合不同的 SBT 版本和 JOOQ 版本。