有没有办法在运行时用Liquibase传递属性替换作为参数?请分享一个例子?

问题描述 投票:1回答:1

我想在我的构建脚本中设置一个环境变量,为下面的changeSet设置模式名称。

<createTable tableName="actor" schemaName="mySchema">
        <column autoIncrement="true" name="id" type="INTEGER">
            <constraints nullable="false" primaryKey="true" primaryKeyName="actor_pkey"/>
        </column>
        <column name="firstname" type="VARCHAR(255)"/>
        <column name="lastname" type="VARCHAR(255)"/>
        <column name="twitter" type="VARCHAR(15)"/>
    </createTable>

我在构建脚本中通过命令行启动Liquibase。

liquibase
1个回答
1
投票

为了传递不同环境下的参数,Liquibase使用了属性替换的方法 这需要对你现有的流程进行2次修改。

第一个是用一个变量替换文字值。

我想让我的构建脚本设置一个环境变量,为下面的changeSet设置模式名(下面我们将使用SCHEMA的属性名)。

<createTable tableName="actor" schemaName="${SCHEMA}">
        <column autoIncrement="true" name="id" type="INTEGER">
            <constraints nullable="false" primaryKey="true" primaryKeyName="actor_pkey"/>
        </column>
        <column name="firstname" type="VARCHAR(255)"/>
        <column name="lastname" type="VARCHAR(255)"/>
        <column name="twitter" type="VARCHAR(15)"/>
    </createTable>

然后我们可以在命令行创建的时候传递一个SCHEMA的值,为了证明将替换什么值,我使用了(注意lookup是我要替换的schema的名字)。

liquibase --changeLogFile=“sample.xml” updateSQL -DSCHEMA=lookup

这里是一段输出结果,它将显示模式已经被替换为lookup的值。

....
CREATE TABLE lookup.actor (id INTEGER GENERATED BY DEFAULT AS IDENTITY NOT NULL, firstname VARCHAR(255), lastname VARCHAR(255), twitter VARCHAR(15), CONSTRAINT actor_pkey PRIMARY KEY (id));
...

如果看起来没问题的话,你可以通过以下方法来运行这个变化集:

liquibase --changeLogFile=“sample.xml” update -DSCHEMA=lookup
© www.soinside.com 2019 - 2024. All rights reserved.