有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

未在Postgres环境中为Liquibase创建java数据库更改日志表

Maven依赖;
Spring Boot版本:2.2.3。释放
Liquibase核心版本:3.8.5
Postgresql版本:42.2.9

我有一个Spring Boot应用程序,它运行在PostgreSQL 11数据库上,该数据库呈现了一种以前没有注意到的新行为。当我运行update命令时,即使正在创建databasechangeloglock表,也不会在活动模式内创建databasechangelog表。这当然会导致运行失败,因为关系不存在。然而我不控制这个表的创建,也从来没有控制过它。这个表过去是自动创建的,就像锁表一样,但现在不是了

下面是我如何为数据库设置我的两个主要对象,并将其分解为update命令使用的对象

private void setDatabase() {
    if (hasConn) {
        try {
            database = (Database) Class.forName("liquibase.database.core.PostgresDatabase").newInstance();
            database.setConnection(new JdbcConnection(getConnection()));
        } catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) {
            log.error("Could not return Liquibase Database Object");
            log.error(e.getMessage());
        }
    } else {
        log.warn("Connection Object not yet set!");
    }
}
private void melt() {
        this.liquibase = new Liquibase(getDatabaseChangeLog(), new ClassLoaderResourceAccessor(), getDatabase());
}
private void drinkUpdate() throws LiquibaseException {
        this.liquibase.update((String) null);
}

我最近将这个应用程序更改为一个多模块Maven项目的一部分,该项目基于新的父POM更改了我使用的所有版本引用

我的问题是,以前是否有人见过这种行为,以及它是否与处理过程中使用的罐子版本有关?为什么更新运行时会生成databasechangeloglock表而不是databasechangelog表?而且看起来databasechangelog表在我的公共模式中生成,对于我生成的每个数据库来说都很好。。。只是不在我的自定义模式对象中,它保存了我的大部分数据库对象

我查看了调试输出,发现我的liquibase.Liquibase对象和相应的liquibase.database.Database对象是完整和准确的,使用当前模式设置为我的值指定了适当命名的databasechangelogdatabasechangeloglock表,但更改日志表拒绝在锁表生成的同时生成。不幸的是,当我手动创建databasechangelog表时,在数据库更改日志中指定的其余对象就会按预期创建


共 (1) 个答案

  1. # 1 楼答案

    我相信您并没有按照预期的方式使用SpringBoot和Liquibase集成。 你不需要直接给liquibase打电话。事实上,这可能就是为什么不创建databasechangelog表的原因。如果配置应用程序:

    • 一定要填写你的申请表。带有JDBC url和指向更改日志的指针的属性
    • 当您调用Springboot:run时,进程将自动看到您有一个db和changelog,并将在启动前运行迁移
    • 如果您不希望DB迁移在启动时运行,而是手动运行,那么我会在CICD管道中使用Liquibase CLI(例如jenkins groovy管道脚本)

    下面是一个关于使用Liquibase设置Springboot的好入门: https://docs.liquibase.com/tools-integrations/springboot/using-springboot-with-maven.html

    我还对它进行了研究,找到了使用SpringBoot初始值设定项:https://start.spring.io/,添加Liquibase作为依赖项的方法

    希望有帮助