通过 Java 传递参数值但不设置环境变量

时间:2021-04-02 15:00:46

标签: java variables parameters liquibase templating

如果我有如下现有的变更日志,每次在我的应用程序中创建一个新用户时,我想使用 Java 将该用户名动态传递给 ${userName},然后调用 Liquibase Java API在我的数据库中实际创建表。

有没有办法做到这一点而不必每次都设置环境变量?我想如果我同时创建多个新用户,这将是一个问题,管理相同的环境变量会很麻烦。我正在寻找一种通过 Java 传递它们的更具编程性的方式,例如传递字符串或使用来自 JDBC 连接字符串的信息。

<changeSet id="1" author="liquibase">
   <createTable tableName="${userName}">
       <column name="id" type="int">
       <constraints primaryKey="true"/>
       </column>
       
       <column name="somethingelse" type="int">
       <constraints nullable="false"/>
     </column>
   </createTable>
</changeSet>

1 个答案:

答案 0 :(得分:0)

所以可以通过Java传入changelog参数。这可以通过以下方式完成:


Database database = DatabaseFactory.getInstance().findCorrectDatabaseImplementation(new JdbcConnection(conn));
                Liquibase liquibase = new liquibase.Liquibase(getChangelogFilePath(), new ClassLoaderResourceAccessor(), database);
                // Requires changelog to contain parameter for account_name in the form ${_____}
                liquibase.setChangeLogParameter("<your parameter here>", <some string in the form ${_____}>);
                liquibase.update(new Contexts(), new LabelExpression());

.setChangeLogParameter() 是如何完成的。请注意,一旦设置了此值,就无法将其设置为其他值,除非您创建新的 Liquibase 对象。

相关问题