【问题标题】:Customizing SQL executed per environment自定义每个环境执行的 SQL
【发布时间】:2015-11-14 06:18:51
【问题描述】:

我们使用 flyway 从 dev -> uat -> prod 推广我们的应用程序。使用 flyway 将应用程序部署到使用轻量级 sql 数据库(例如 Derby 或 H2)的开发人员桌面将非常有用。由于各种原因,Oracle 对于我们的一些开发人员来说不是一个好的选择。

类似的question 指出了flyway 中的一项功能,可以为每个目标数据库维护单独的脚本集。

我不愿意依赖手动同步两组脚本。 Oracle 和 Derby 之间的 SQL 差异很小。开发人员是否可以在 flyway 中插入一些 java 代码,以便在运行时根据环境进行一些轻量级的 SQL 动态剥离(例如删除表空间指定)?

【问题讨论】:

    标签: flyway


    【解决方案1】:

    对于像这样的细微差别,Flyway 的占位符替换效果很好。简单并轻松地弥合常见的细微差异。 http://flywaydb.org/documentation/faq.html#placeholders

    【讨论】:

      【解决方案2】:

      根据我的经验,从长远来看,占位符并不足以替代(oracle v HSQLDB w. or 语法)。

      条件模板可能是一种解决方案,但不幸的是,flyway 不支持开箱即用,请参阅year old request

      您可以通过callbacks mechanism 自己实现条件或“轻量级的 SQL 动态剥离”。这会有点脏,因为回调不被flyway视为头等公民,但非常可行。缺点是您正在失去 Flyway 在其简单性中的大部分吸引力,并且在技术上使用 Liquibase 的 DSL 可能会更好。

      最终对我们非常有效的是在开发机器和 CI 服务器上一直使用 dockerized XE 11g 图像。 docker-maven-plugin 也很有帮助。不利的一面是,非基于 Linux 的开发人员必须习惯于 boot2docker,但是针对真实数据库运行测试确实获得了巨大的回报。除非您使用没有任何数据库逻辑的普通 Hibernate。

      【讨论】:

        猜你喜欢
        • 2013-01-17
        • 2011-02-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-19
        • 1970-01-01
        • 2011-08-20
        • 1970-01-01
        相关资源
        最近更新 更多