我有许多使用 Spring-Boot / Gradle 用 Groovy 编写的项目。所有这些应用程序都为不同的客户端执行类似的工作,但共享大量功能。
为了避免代码重复,我将共享组件分离到一个库中,当然这对于 Groovy 代码来说效果很好。但是,该库还包含 Flyway 脚本来创建该库所依赖的架构。
由于数据隔离规则,并且为了保持应用程序完全独立,每个应用程序需要在自己的架构中拥有自己的数据库表副本,并且每个应用程序在自己的 application.yaml 中拥有自己的数据库连接详细信息。
然后我无法弄清楚如何在单独的项目构建中使用共享的 Flyway 脚本。
我可以看到实现此目的的一种方法是每次针对适当的数据库运行库的 Flyway 迁移多次(每个应用程序一次),但这将涉及将所有应用程序的数据库详细信息放入库中 - 这又是重复。
我可以看到实现此目的的另一种方法是将 Flyway 脚本放入应用程序项目中,但这将涉及从库中复制脚本,因此我将拥有 n 个副本,而不是一个副本。这将使更改变得很痛苦(如果我想将更改应用到所有或许多项目),并且还将应用程序与应该被库隐藏的数据库模式定义联系起来。
还有其他人处理过这个问题吗?我错过了什么明显的事情吗?或者我只是要求 Flyway 做一些它不能做的事情?
谢谢
我需要遍历 Map of Maps(它本身可能包含未知深度的 Maps)并删除任何空值。如果所有值都为空(留下空地图),则应删除整个地图。
澄清一下,查看下面的 myMap 我希望删除 b、e 和 j,因为它们为空,但也删除 i,因为当 j 被删除时它包含一个空映射,而 k 是一个空映射开始。
我可以使用 findAll 删除顶级空值(如第一个断言所示),但想知道是否有一种 Groovy 方法来解析第二个断言。
Map myMap = [ a : 1
, b : null
, c : [ d : 1
, e : null
, f : [ g : 1
, h : 2 ]
, i : [ j : null ]
, k : [:] ] ]
assert [a:1, c:[d:1, e:null, f:[g:1, h:2], i:[j:null], k:[:]]] == myMap.findAll(){ it.value …Run Code Online (Sandbox Code Playgroud)