2
我以编程方式对DatabaseChangeLog对象进行了更改。 我怎么能基于java的DatabaseChangeLog生成diffChangeLogFile文件。如何以编程方式从DatabaseChangeLog生成xml文件
编辑: 这里是一个例子
public DatabaseChangeLog removeDropColumnChangeFromDatabaseChangeLog(
DatabaseChangeLog databaseChangeLog, String oldName,
String newName, String tableName) {
DatabaseChangeLog changeLog = databaseChangeLog;
Collection<ChangeSet> changeSetsToRemove = new ArrayList<ChangeSet>();
List<ChangeSet> changeSets = changeLog.getChangeSets();
// Remove DropColumnChange from ChangeSets using tableName, oldName and
// newName
for (ChangeSet cs : changeSets) {
for (Change change : cs.getChanges()) {
if (change instanceof DropColumnChange) {
DropColumnChange aux2 = (DropColumnChange) change;
if (aux2.getTableName().equals(tableName)) {
if (aux2.getColumnName().equals(oldName)) {
changeSetsToRemove.add(cs);
}
}
}
}
}
changeSets.removeAll(changeSetsToRemove);
DatabaseChangeLog databaseChangeLogWithoutAddColumn = new DatabaseChangeLog();
for (ChangeSet cs : changeSets) {
databaseChangeLogWithoutAddColumn.addChangeSet(cs);
}
return databaseChangeLogWithoutAddColumn;
}
这种方法将有一个DatabaseChangeLog对象作为输入,它会删除从它的dropColumn改变时,表名是等于表名的参数。
在对DatabaseChangeLog对象进行此修改后,我想生成一个xml文件,其中包含相对于DatabaseChangeLog对象(为了进行更新而在liquibase生成diff后生成的xml)的变更集。
像这样:
databaseChange.generateXmlFile(pathToFile);
你能解释一下什么“...程序上改变了DatabaseChangeLog对象...”的含义?我不明白你做了什么。 – Jens
@Jens我上面加了一个例子 – larnouch
也许你可以使用主[Liquibase](http://www.liquibase.org/javadoc/liquibase/Liquibase.html)类并调用它的一个方法来完成这个任务。我没有直接从Java中调用liquibase,也没有编写任何liquibase插件。所以也许这是因为我缺乏这方面的知识,但是你如何运行代码(或者你如何运行liquibase?) – Jens