未在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
对象是完整和准确的,使用当前模式设置为我的值指定了适当命名的databasechangelog
和databasechangeloglock
表,但更改日志表拒绝在锁表生成的同时生成。不幸的是,当我手动创建databasechangelog
表时,在数据库更改日志中指定的其余对象就会按预期创建
# 1 楼答案
我相信您并没有按照预期的方式使用SpringBoot和Liquibase集成。 你不需要直接给liquibase打电话。事实上,这可能就是为什么不创建databasechangelog表的原因。如果配置应用程序:
下面是一个关于使用Liquibase设置Springboot的好入门: https://docs.liquibase.com/tools-integrations/springboot/using-springboot-with-maven.html
我还对它进行了研究,找到了使用SpringBoot初始值设定项:https://start.spring.io/,添加Liquibase作为依赖项的方法
希望有帮助