Как создать liquibase dbchangelog программно, используя Java-код? - PullRequest
2 голосов
/ 03 апреля 2019

Недавно я использовал набор изменений liquibase на generateChangelog, diff и updateSQL, чтобы создать журнал изменений, найти разницу и сгенерировать сценарии ddl соответственно.

И мой журнал изменений выглядел примерно так, и это был файл XML

<?xml version="1.0" encoding="UTF-8"?>

<databaseChangeLog
 xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
 http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.1.xsd">

<changeSet author="John (generated)" id="1439225004329-1">
 <createTable tableName="Author ">
    <column autoIncrement="true" name="id" type="BIGINT">
        <constraints primaryKey="true"/>
    </column> 
    <column name="name" type="VARCHAR(255)"/>
  </createTable>
</changeSet>

</databaseChangeLog>

Я создал этот xml вручную. И я пытался создать тот же журнал изменений с помощью кода Java. Мне трудно понять, как это сделать в Java. Кто-нибудь может пролить свет на это?

Я добавил liquibase 3.5.5 как maven dependency в свой проект.

1 Ответ

1 голос
/ 04 апреля 2019

что по этому поводу?

final Path changeLogPath = Paths.get("/tmp/mychangelog.xml");

final DatabaseChangeLog changeLog = new DatabaseChangeLog(changeLogPath.toString());
changeLog.setPhysicalFilePath("mychangelog.xml");

final CreateTableChange createTableChange = new CreateTableChange();
createTableChange.setTableName("firsttable");
createTableChange.addColumn(new ColumnConfig().setName("col1").setType("VARCHAR(20)"));

final ChangeSet changeSet = new ChangeSet("id1", "author", Boolean.FALSE, Boolean.FALSE, null, null, null, changeLog);
changeSet.addChange(createTableChange);

try (OutputStream os = new FileOutputStream(changeLogPath.toString())){
    serializer.write(changeLog.getChangeSets(), os);
}
...