代码之家  ›  专栏  ›  技术社区  ›  Nathan Q

强制设置液化基变更日志参数

  •  3
  • Nathan Q  · 技术社区  · 10 年前

    我的liquibase变更日志中也定义了grant语句。我还需要用户和主机是可变的,所以我使用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时定义参数:

    -拨款。user=exampleuser-Dgrants.host=示例主机

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

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

    编辑

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

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

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

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

    1个前提条件失败

    …/changelog主机。xml:Changelog属性'授权。主机“”不是 设置


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

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

    1 回复  |  直到 10 年前
        1
  •  3
  •   dbf    10 年前

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