【发布时间】:2017-08-05 21:22:39
【问题描述】:
我有许多使用 Spring-Boot / Gradle 用 Groovy 编写的项目。所有这些应用程序都为不同的客户端执行类似的工作,但共享大量功能。
为了避免代码重复,我已将共享组件分离到一个库中,当然这对于 Groovy 代码来说效果很好。但是,该库还包含用于创建该库所依赖的架构的 Flyway 脚本。
由于数据隔离规则以及为了使应用程序完全独立,每个应用程序都需要在其自己的架构中拥有自己的数据库表副本,并且每个应用程序在其自己的 application.yaml 中都有自己的数据库连接详细信息.
然后我无法解决的是如何在单独的项目构建中使用共享的 Flyway 脚本。
我可以看到实现此目的的一种方法是每次针对适当的数据库运行库的 Flyway 迁移多次(每个应用程序一次),但这将涉及将所有应用程序的数据库详细信息放入库中 - 这是再次重复。
我可以看到实现此目的的另一种方法是将 Flyway 脚本放入应用程序项目中,但这将涉及从库中复制脚本,因此我将拥有 n 个副本,而不是拥有一个副本。这会使更改变得痛苦(如果我想将更改应用于所有或许多项目)并且还将应用程序与应该被库隐藏的数据库模式定义联系起来。
还有其他人处理过这个问题吗?我错过了什么明显的东西吗?还是我只是在询问 Flyway 做不到的事情?
谢谢
【问题讨论】:
-
我可能误读了,但是库不是它自己的 JAR,这样您就可以将其导入其他项目吗?然后,您将在每个应用程序中调用诸如 SchemaUtil.migrate() 之类的方法。
-
您还没有说这是单个多模块构建还是多个构建。如果单个多模块构建一个项目可以访问另一个项目的
configurations。如果单独构建,您可能需要发布/使用包含 sql 文件的工件(jar)
标签: gradle spring-boot groovy flyway