自定义每个环境执行的SQL

时间:2015-08-20 14:33:13

标签: flyway

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

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

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

2 个答案:

答案 0 :(得分:1)

对于像这样的细微差别,Flyway的占位符替代品确实存在奇迹。简单和桥梁容易出现常见的细微差别http://flywaydb.org/documentation/faq.html#placeholders

答案 1 :(得分:0)

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

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

您可以通过callbacks mechanism自行实现条件或“轻量级动态剥离SQL”。这将有点脏,因为回程不被飞路视为头等公民,但非常可行。不足之处在于,您在简单性方面失去了Flyway吸引力的重要部分,并且通过使用Liquibase的DSL在技术上可以更好。

最终对我们有用的是在开发机器和CI服务器上一直使用dockerized XE 11g图像。 docker-maven-plugin也很有帮助。在缺点方面,非基于Linux的开发人员不得不习惯boot2docker,但是对真正的数据库运行测试确实可以节省大量时间。除非你使用普通的Hibernate而没有任何DB逻辑。