我在 MySQL 实例上有一个 Scala Play 应用程序。我将我的进化存储为conf/evolutions/$db/$step.sql
文件。但是,我的一些表是动态的,即它们的架构可能会在 Play 应用程序的运行时被修改。从 Play 的进化框架中排除这些表格的最佳方法是什么?
我有几个选择,但没有一个看起来特别优雅:
1)将所有有问题的表移动到一个单独的数据库,其中进化插件被禁用 - 这不是很好,因为我也必须将所有具有外键约束的相关表移出当前数据库。
2) 不知何故覆盖了 Play 的进化框架——不幸的是,Play 的进化框架不是模块化的,也不是可扩展的。我希望它有一些 Scala 或 Java 钩子def onUp(tableName: String)
,def onDown(tableName: String)
我可以覆盖它们,但 Play 的进化框架没有看起来那么好的抽象,而且非常单一。
3) 我知道 Play 在名为的表中创建了一个条目play_evolutions
- 我可以从我的应用程序中修改该表onStart
以手动取出所有与表相关的违规内容。这会起作用,但是非常hackish并且对Play的内部表示/模式更改的处理有很强的依赖性。
4) 只需将所有有问题的表 sql 语句移动到conf/evolutions/$db/ignore_evolution_$step.sql
- 这样这些表就脱离了进化框架的监视,但我基本上必须滚动我自己的框架来解析这些文件并执行它们。
5)还有什么我错过的吗?