如何在版本 4.29 中以编程方式运行 Liquibase 更新并支持回滚?

问题描述 投票:0回答:1

我目前在 Spring 应用程序中使用 Liquibase 版本 4.29,我想以编程方式而不是通过命令行运行 Liquibase 更新。我已使用属性 liquibase.enabled=true 启用了 Liquibase,虽然在启动应用程序时迁移脚本成功运行,但我遇到了回滚问题。

当我使用 Liquibase 命令行界面 (CLI) 运行迁移,然后使用 liquibase rollback 执行回滚时,它按预期工作。但是,当我看到 Liquibase 在启动 Spring 应用程序时运行脚本时,回滚并未按预期工作;它返回“0 个更改已回滚。

我注意到 liquibase.update() 方法已被弃用。该文档建议使用以下方法:

java.sql.Connection connection = openConnection(); // Your openConnection logic here
Database database = DatabaseFactory.getInstance().findCorrectDatabaseImplementation(new JdbcConnection(connection));
Liquibase liquibase = new Liquibase("path/to/changelog.xml", new ClassLoaderResourceAccessor(), database);
liquibase.update(new Contexts(), new LabelExpression());

考虑到 update() 已被弃用,以编程方式执行 Liquibase 更新的推荐方法是什么,同时确保: Liquibase 成功迁移脚本,否则如果迁移失败,Spring 应用程序将无法启动。 回滚可以正常工作,与 CLI 类似。 任何指导或示例将不胜感激!

java spring-boot liquibase database-versioning
1个回答
0
投票

尝试使用此依赖项:

<dependency>
    <groupId>org.liquibase</groupId>
    <artifactId>liquibase-core</artifactId>
    <version>4.23.0</version> 
</dependency>

然后是这个:

@Autowired
private DataSource dataSource;

public void rollbackToTag(String tag) throws Exception {
    try (Connection connection = dataSource.getConnection()) {
        Database database = DatabaseFactory.getInstance()
                .findCorrectDatabaseImplementation(
                        new JdbcConnection(connection));
        Liquibase liquibase = new Liquibase("db/changelog/db.changelog-master.xml",
                new ClassLoaderResourceAccessor(),
                database);
        liquibase.rollback(tag, "");
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.