首页 > 解决方案 > 为什么 Liquibase generateChangeLog 会生成一个空的 changelog 文件?

问题描述

我正在使用 Liquibase 从现有的 H2 数据库生成数据库方案。我使用以下内容:

liquibase  --driver=org.h2.Driver --classpath=./h2-1.4.199.jar --changeLogFile=db.schema.sql --url="jdbc:h2:mem:testdb" --username=sa --password= --logLevel=debug generateChangeLog

因此,为了连接到 H2 实例,使用绝对默认值。但是上面的命令会生成一个空的变更日志文件(只是一些基本的 Liquibase 头文件)。

我尝试使用不同的 url(文件中的 h2),我尝试设置不同的密码和用户名,我什至尝试定义 defaultSchemaName 参数,但仍然相同。Liquibase maven 插件说:未找到更改,无事可做 没有 maven 插件的 Liquibase 说:Liquibase 命令“generateChangeLog”已成功执行。

我还尝试输入无效凭据(用户名或密码),但仍然相同。

标签: databaseh2liquibase

解决方案


generateChangeLog命令从指定的数据库中导出数据。这意味着应该存在这样的数据库并填充一些数据。

此处没有必要指定内存中嵌入的 URL jdbc:h2:mem:testdb。每个进程都有自己的内存和自己的内存数据库。Liquibase 肯定会在它自己的内存中看到一个空数据库。

您需要使用您的应用程序创建一个普通的持久性数据库,并在此处使用其 URL。我强烈建议您在数据库 URL 中指定绝对数据库路径(不带文件扩展名),以确保您的应用程序和 Liquibase 将使用相同的数据库。请注意,如果没有附加参数(自动服务器模式),您不能同时由两个应用程序使用嵌入式数据库,因此您需要在启动 Liquibase 之前关闭应用程序中的数据库。作为替代方案,您可以启动 H2 服务器进程并使用远程 URL,或者您可以使用自动服务器模式。

您也可以;IFEXISTS=TRUE仅附加到 Liquibase 的数据库 URL。它将防止在其中意外地静默创建新的空数据库。


推荐阅读