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