强制设置更新日志参数



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

    <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

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

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

编辑

好的,所以我修复了它,这要归功于下面的答案如下:

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

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

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

1 前提条件失败

.../changelog-master.xml : Changelog 属性 'grants.host' 不是 设置


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

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

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

相关内容

  • 没有找到相关文章

最新更新