【问题标题】:How to create the liquibase dbchangelog programatically using java code?如何使用 java 代码以编程方式创建 liquibase dbchangelog?
【发布时间】:2019-04-04 15:09:09
【问题描述】:

我最近使用 liquibase 更改设置为 generateChangelogdiffupdateSQL 来创建更改日志,分别查找差异并生成 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 添加到我的项目中。

【问题讨论】:

    标签: spring jpa liquibase changelog


    【解决方案1】:

    这个呢?

    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);
    }
    

    【讨论】:

    猜你喜欢
    • 2019-08-25
    • 1970-01-01
    • 2021-01-11
    • 1970-01-01
    • 2012-07-30
    • 2011-07-05
    • 1970-01-01
    • 1970-01-01
    • 2023-01-20
    相关资源
    最近更新 更多