代码之家  ›  专栏  ›  技术社区  ›  p.purr

使用Flyway和从Eclipse插件构建的RCP

  •  0
  • p.purr  · 技术社区  · 7 年前

    一种解决方案是让每个插件执行自己的迁移(即在每个插件中调用Flyway.migrate),但这有一个缺点,即如果数据库中的表由多个插件共享,那么在插件之间排序迁移调用的执行顺序就成了关键和问题。

    更好的解决方案是使用单个迁移调用,但问题是如何将Java迁移脚本的类路径提供给Flyway实例,特别是考虑到由于延迟加载Eclipse插件类,可能尚未加载所需的迁移代码。这对于基于SQL的迁移脚本来说不是问题,因为API支持这一点——它不支持基于类路径的搜索。

    非常感谢您的任何建议。。。

    1 回复  |  直到 7 年前
        1
  •  0
  •   Rüdiger Herrmann    7 年前

    extension points and extensions 在基于RCP/插件的应用程序中。

    migrationScript

    <extension point="org.example.migrationScript">
      <script sql="alter table ..." />
    </extension>
    

    IExtensionRegistry 全部读取 迁移脚本

    如果迁移需要贡献Java代码,则迁移插件可以定义接口或抽象类,贡献插件可以为其提供具体实现。

    例如,迁移插件定义了这个接口:

    interface ScriptProvider {
      String sql();
    }
    

    ... 各个插件为迁移贡献了自己的一份力量

    <extension point="org.example.migrationScript">
      <script class="org.example.MyScriptProvider" />
    </extension>
    

    public class MyScriptProvider {
      public String sql() { return "alter table ..."; }
    }
    

    类路径和必要插件的激活分别由RCP运行时和OSGi管理。