gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 16:30:49 29 4
gpt4 key购买 nike

Maven 依赖项;
Spring Boot版本:2.2.3.RELEASE
Liquibase核心版本:3.8.5
Postgresql版本:42.2.9

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

以下是我如何为数据库和 Liquibase 设置 2 个主要对象以供更新命令使用。

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 更改了我正在使用的所有版本引用。

我的问题是,是否有人以前见过这种行为,以及它是否与处理时使用的 jar 版本有关?为什么databasechangeloglock表在更新运行时生成,而不是 databasechangelog table ?还;看来 databasechangelog在我的公共(public)模式中生成的表对于我生成的每个数据库来说都很好......只是不在保存大量数据库对象的自定义模式对象中。

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

最佳答案

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

  • 确保使用 JDBC url 和指向更改日志的指针填写 application.properties
  • 当您调用 Springboot:run 时,该过程将自动查看您有一个数据库和变更日志,并将在启动之前运行迁移。
  • 如果您不希望数据库迁移在启动时运行而是手动运行,那么我会在 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 作为依赖项

希望有帮助。

关于java - 未在 Liquibase 的 Postgres 环境中创建数据库更改日志表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62046924/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com