是否可以在liquibase changeset中将表名作为参数传递?

时间:2017-07-08 08:50:05

标签: java spring hibernate architecture liquibase

  

当春季申请开始时,我正在激活liquibase chnageset

<changeSet author="kbatra" id="1.2">
        <createTable schemaName="public" tableName="table_a">
            <column name="id" autoIncrement="true" type="BIGINT">
                <constraints primaryKey="true" />
            </column>
            <column name="first_name" type="varchar(255)" />
            <column name="last_name" type="varchar(255)" />
            <column name="username" type="varchar(255)">
                <constraints unique="true" />
            </column>
            <column name="password" type="varchar(1000)" />
            <column name="email" type="varchar(255)" />
        </createTable>
    </changeSet>
  

现在我想要的是我想要执行相同的changeSet但是   不同的表名是否可以传递表名   liquibase作为春天的争论?还有其他吗?   实现同样的情况?

     

我正在使用spring hibernate应用程序的一个模块   必须生成相同的sql架构结构,但具有不同的表   根据用户要求在运行时命名,如果不可能的话   通过liquibase然后我怎么能实现这种情况任何人   请帮我设计一下这个模块的架构?

1 个答案:

答案 0 :(得分:1)

您需要在变更集中使用可替换参数,然后在部署变更集时设置这些参数。您的变更集可能如下所示:

<changeSet author="kbatra" id="1.2">
        <createTable schemaName="public" tableName="${USER_TABLE_NAME}">
            <column name="id" autoIncrement="true" type="BIGINT">
                <constraints primaryKey="true" />
            </column>
            <column name="first_name" type="varchar(255)" />
            <column name="last_name" type="varchar(255)" />
            <column name="username" type="varchar(255)">
                <constraints unique="true" />
            </column>
            <column name="password" type="varchar(1000)" />
            <column name="email" type="varchar(255)" />
        </createTable>
    </changeSet>

然后在运行liquibase USER_TABLE_NAME命令时需要设置update的值,该命令在应用程序启动时运行。