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

Passing in parameter values through Java but without setting environment variables

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

有没有不用每次都设置环境变量的方法?我想如果我同时创建多个新用户会是个问题,管理相同的环境变量会很麻烦。我正在寻找一种通过 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>

所以可以通过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 对象。