尝试从Java代码运行时,liquibase未创建DDL命令
更新:
我认为问题是这行,因为当我调用changelog.getChangeSets()
时它返回一个空列表,那么这段代码有什么问题呢?
I think the problem is this line because it returns an empty list when I called changelog.getChangeSets()
, so what is wrong this code?
static liquibase.changelog.DatabaseChangeLog changelog = new DatabaseChangeLog(
"src/main/resources/changelog.xml");
原始帖子:
我的目标是在Java类中使用现有的changelog运行数据库DDL命令. 目前,我的设置是这样的:
My goal is to run database DDL commands with existing changelog in Java class. Currently my set up is like this:
public class LiquibaseWithJavaCode {
//find the location of the existing changelog.xml file
static liquibase.changelog.DatabaseChangeLog changelog = new DatabaseChangeLog(
"src/main/resources/changelog.xml");
static void executeUpdate1() throws SQLException, LiquibaseException {
java.sql.Connection connection = getConnection();
Database database = DatabaseFactory.getInstance()
.findCorrectDatabaseImplementation(
new JdbcConnection(connection));
Liquibase liquibase = new liquibase.Liquibase(changelog,
new ClassLoaderResourceAccessor(), database);
liquibase.update(new Contexts(), new LabelExpression());
}
public static Connection getConnection() throws SQLException {
Connection conn = null;
Properties connectionProps = new Properties();
connectionProps.put("user", "liquibase");
connectionProps.put("password", "password");
conn = DriverManager
.getConnection(
"jdbc:sqlserver://111.11.1.1;databaseName=liquibase;SelectMethod=cursor",
connectionProps);
return conn;
}
}
public static void main(String[] args) throws SQLException,
LiquibaseException {
executeUpdate1();
}
当我运行它时,这里是输出:
When I run it here is the output:
我创建了changelog.xml
,它包含许多处理很多DDL命令的变更集.但是看来changeLogFile
不包含任何变更集,它是空的.我仔细检查了数据库,实际上并没有实际创建表,只创建了两个表DATABASECHANGELOG
和DATABASECHANGELOGLOCK
.
I created the changelog.xml
and it contains a lot of changeset that handles a lot of DDL command. But it seems the changeLogFile
does not contain any changeset, it is empty. I double checked with the database, and it was indeed no actually table created, only two tables DATABASECHANGELOG
and DATABASECHANGELOGLOCK
being created.
我做错了什么吗?我该如何纠正?老实说,我对此并不熟悉,请提出建议.
Did I do anything wrong? How do I correct it? To be honest I am not familiar about it so please advice.
new DatabaseChangeLog仅创建一个新的空变更日志文件.要解析现有文件,请使用:
new DatabaseChangeLog just creates an new empty changelog file. To parse an existing file, use:
ChangeLogParser parser = ChangeLogParserFactory.getInstance().getParser("src/main/resources/changelog.xml", resourceAccessor);
DatabaseChangeLog databaseChangeLog = parser.parse("src/main/resources/changelog.xml", new ChangeLogParameters(), resourceAccessor);
对于resourceAccessor,您可能需要new ClassLoaderResourceAccessor()
For a resourceAccessor, you probably want new ClassLoaderResourceAccessor()