强制设置liquibase changelog参数

时间:2016-01-15 10:24:15

标签: mysql liquibase

我的liquibase更改日志中还定义了语句。我还需要用户和主机是可变的,所以我使用changelog参数将其定义为:

    <changeSet id="exampleuser_grants_tbl_example" author="me">
        <preConditions onFail="MARK_RAN">
            <tableExists tableName="tbl_example" />
        </preConditions>
        <sql>
            GRANT INSERT, UPDATE, DELETE 
            ON `tbl_example` TO '${grants.user}'@'${grants.host}';
        </sql>
    </changeSet>

然后我可以在命令行中运行liquibase时定义参数:

-Dgrants.user = exampleuser -Dgrants.host = examplehost

但是当我忘记定义这些参数时,它不会给出任何错误。 在GRANT语句中使用MySQL之前,MySQL是否不需要用户存在? 我可以添加一个前置条件来检查用户是否存在,但是由于可能没有设置主机参数,因此并没有真正解决问题。

在使用更改日志文件之前,有没有办法强制设置参数?

修改

好的,所以我修复了它,感谢下面的答案如下:

在更改日志文件的顶部,我添加了

<preConditions>
    <changeLogPropertyDefined property="grants.user" />
    <changeLogPropertyDefined property="grants.host" />
</preConditions>

如果未设置主机参数,现在会出现以下错误:

1个先决条件失败

  

... / changelog-master.xml:更改日志属性&#39; grants.host&#39;不是   设置

至于我的MySQL服务器在为名为$ {grants.user} @ $ {grants.host}的用户创建授权时没有产生任何错误的问题:

http://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sqlmode_no_auto_create_user

1 个答案:

答案 0 :(得分:3)

在这里查看changeLogPropertyDefined前置条件http://www.liquibase.org/documentation/preconditions.html。还有一个customPrecondition标记,因此您可以在Java中实现任何自定义逻辑。