【发布时间】:2014-12-31 21:48:36
【问题描述】:
在 Flyway Db 内部有一个名为“clean”的命令,如果我们使用它将删除模式中的所有对象。
删除配置模式中的所有对象(表、视图、过程、触发器...)。 架构按照 schemas 属性指定的顺序进行清理。
我们如何禁用此功能,以便在需要之前不会有人意外使用它?
【问题讨论】:
标签: flyway
在 Flyway Db 内部有一个名为“clean”的命令,如果我们使用它将删除模式中的所有对象。
删除配置模式中的所有对象(表、视图、过程、触发器...)。 架构按照 schemas 属性指定的顺序进行清理。
我们如何禁用此功能,以便在需要之前不会有人意外使用它?
【问题讨论】:
标签: flyway
命令行的最佳选择是用你自己的封装 Flyway 的脚本。然后你可以拦截 clean 命令并且不执行它。
【讨论】:
最简单的方法是管理数据库的权限并拒绝对 flyway 用户的删除操作。
如果您不掌握数据库配置和使用 java Api,您可以编写一个 Aspect 以在以下切入点“execution(public * org.flywaydb.core.Flyway.clean (..)"(未测试)
【讨论】:
jrf 的评论更有用,将其添加为答案。
您可以针对不同的环境使用不同的 flyway.conf 文件并设置 flyway.cleanDisabled= true/false。
使用带有配置文件选项的 flyway 命令:
示例 > flyway -configFile=path/to/myAlternativeConfig.conf clean
现在,这应该可以让您拥有使用 clean 的分离性和灵活性。就像您可以在开发环境中启用 clean 并在 prod 上禁用它一样。
【讨论】:
在 4.0 版本中,您可以通过设置 cleanDisabled 标志来禁用清理。
在 pom 中
<cleanDisabled>false</cleanDisabled>
【讨论】: