如果我有如下现有的变更日志,每次在我的应用程序中创建一个新用户时,我想使用 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>
答案 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 对象。