通过 maven liquibase 插件填充时,Hsqldb 没有数据

     2023-04-18     9

关键词:

【中文标题】通过 maven liquibase 插件填充时,Hsqldb 没有数据【英文标题】:Hsqldb has no data when populated via maven liquibase plugin 【发布时间】:2013-04-24 03:25:32 【问题描述】:

我已创建架构并通过 Maven liquibase 插件填充它:

<plugin>
    <groupId>org.liquibase</groupId>
    <artifactId>liquibase-maven-plugin</artifactId>
    <version>2.0.5</version>
    <configuration>
        <propertyFile>src/main/resources/db/config/db.config.properties</propertyFile>
        <changeLogFile>src/main/resources/db/changelog/db.changelog-master.xml</changeLogFile>
    </configuration>
</plugin>

属性文件:

driver: org.hsqldb.jdbcDriver
#HSQLDB Embedded in file
url: jdbc:hsqldb:file:src/main/resources/db/hsqldb/dataFile
username: SA
password:

正如我在调用 mvn liquibase:update 时在输出中看到的:

[INFO] Executing on Database: jdbc:hsqldb:file:src/main/resources/db/hsqldb/dataFile
INFO 24.04.13 10:00:liquibase: Successfully acquired change log lock
INFO 24.04.13 10:00:liquibase: Creating database history table with name: DATABASECHANGELOG
INFO 24.04.13 10:00:liquibase: Reading from DATABASECHANGELOG
INFO 24.04.13 10:00:liquibase: Reading from DATABASECHANGELOG
INFO 24.04.13 10:00:liquibase: ChangeSet src/main/resources/db/changelog/db.changelog-1.0.xml::1::sav ran successfully in 7ms
INFO 24.04.13 10:00:liquibase: ChangeSet src/main/resources/db/changelog/db.changelog-1.0.xml::2::sav ran successfully in 3ms
INFO 24.04.13 10:00:liquibase: Successfully released change log lock
INFO 24.04.13 10:00:liquibase: Successfully released change log lock

db.changelog-master.xml 包含:

 <include file="src/main/resources/db/changelog/db.changelog-1.0.xml"/>

db.changelog-1.0.xml 包含:

 <changeSet id="1" author="sav">
        <createTable tableName="testTable">
            <column name="id" type="int">
                <constraints primaryKey="true" nullable="false"/>
            </column>
            <column name="name" type="varchar(50)">
                <constraints nullable="false"/>
            </column>
            <column name="active" type="boolean" defaultValueBoolean="true"/>
        </createTable>
    </changeSet>

    <changeSet id="2" author="sav">
        <insert tableName="testTable">
            <column name="id" value="1"/>
            <column name="name" value="First String"/>
        </insert>
        <insert tableName="testTable">
            <column name="id" value="2"/>
            <column name="name" value="Second String"/>
            <column name="active" value="false"/>
        </insert>
    </changeSet>

似乎一切正常。现在我要去src/main/resources/db/hsqldb/文件夹并看到三个文件:

dataFile.log
dataFile.properties
dataFile.script

但我在dataFile.script 中没有看到CREATE TABLE testTable DDL 语句。 接下来在 Intelli IDEA 中配置数据源插件(设置 jdbc hsql 驱动程序,url:jdbc:hsqldb:file:/src/main/resources/db/hsqldb/dataFile,用户:sa)。连接它,调用查询:

SELECT * FROM   INFORMATION_SCHEMA.SYSTEM_TABLES;
    我看不到我尝试创建的表。 每个表的 hsqldb_type 字段的值为 MEMORY。我希望它是类似的文件。

有什么想法吗?:)

PS: 1. Maven仓库返回HSQLDB作为第一个搜索结果,其最新版本为1.8.0.10。实际上,我必须使用 HSQLDB DATABASE 及其 2.2.9 版本。它解决了创建表的问题。 2. 我必须使用文件的绝对路径和 ';ifexists=true' 属性来连接到 IDEA 数据源插件中的现有数据库。因此,我在属性文件中的 url 连接字符串与插件中使用的不同。

【问题讨论】:

【参考方案1】:

你需要注意文件路径的使用:

这是一个相对路径:

driver: org.hsqldb.jdbcDriver
#HSQLDB Embedded in file
url: jdbc:hsqldb:file:src/main/resources/db/hsqldb/dataFile

这是当前驱动器中的绝对路径:

Next in Intelli IDEA I configure datasource plugin (set jdbc hsql driver, url: jdbc:hsqldb:file:/src/main/resources/db/hsqldb/dataFile, user: sa )

尝试使用绝对路径。

除此之外,在您尝试检查现有数据库中的内容时,通过将 ;ifexists=true 添加到连接 URL 来明确要求数据库存在。

由于我们不确定 Liquibase 是否正确关闭了数据库,您可以在 Liquibase 连接 URL 中添加一个属性,以确保完整写入数据;hsqldb.write_delay=false。我们假设您为此属性使用 HSQLDB 2.x。

【讨论】:

【参考方案2】:

使用 HSQLDB 1.8.x,liquibase catalog 应该设置为 null。 我们不能强制目录为空,因为方法AbstractJdbcDatabase.correctSchema() 不应该设置catalog=schema,如果supportCatalogs() 返回false。

我会为此发布一个问题。

【讨论】:

Liquibase maven:spring-boot启动时找不到更改日志位置

】Liquibasemaven:spring-boot启动时找不到更改日志位置【英文标题】:Liquibasemaven:Cannotfindchangeloglocationwhenspring-bootstarts【发布时间】:2018-12-1416:38:01【问题描述】:我的liquibasemaven插件配置是:<plugin><groupId>org.liquibase</grou... 查看详情

如何在 Spring Boot 中配置 Maven Liquibase 插件?

】如何在SpringBoot中配置MavenLiquibase插件?【英文标题】:HowcanIconfigureMavenLiquibaseplugininSpringBoot?【发布时间】:2019-08-3023:35:24【问题描述】:我正在学习Liquibase和SpringBoot,所以我用SpringInitializr创建了一个简单的项目。在我添加的... 查看详情

无法通过我的 spring maven 项目集成和运行 liquibase

】无法通过我的springmaven项目集成和运行liquibase【英文标题】:Notabletointegrateandrunliquibasethroughmyspringmavenproject【发布时间】:2017-10-1418:59:39【问题描述】:我正在尝试通过基于弹簧的maven项目运行mvnliquibase:update。但我看到以下错... 查看详情

liquibase-maven-plugin 和 sqlFile

】liquibase-maven-plugin和sqlFile【英文标题】:liquibase-maven-pluginandsqlFile【发布时间】:2016-09-2305:53:45【问题描述】:我正在尝试使用liquibase-maven-plugin来运行我的数据库更新。我有以下插件配置:<configuration><username>$dba.usernam... 查看详情

liquibase-maven-plugin 与 testcontainers 的使用

】liquibase-maven-plugin与testcontainers的使用【英文标题】:Theusageofliquibase-maven-pluginwithtestcontainers【发布时间】:2021-12-0100:44:29【问题描述】:假设我有这个插件配置(使用hsqldb):<plugin><groupId>org.liquibase</groupId><artif... 查看详情

Liquibase 和 JPA 注释实体

】Liquibase和JPA注释实体【英文标题】:LiquibaseandJPAannotatedentities【发布时间】:2015-01-1014:17:03【问题描述】:我正在尝试将Liquibase与JPA注释一起使用,但我似乎无法正常工作。我的项目中有一个没有表和一个JPA实体的干净数据库... 查看详情

无法让 liquibase-hibernate 插件与 gradle 一起工作

】无法让liquibase-hibernate插件与gradle一起工作【英文标题】:Unabletogetliquibase-hibernatepluginworkwithgradle【发布时间】:2018-08-1913:38:13【问题描述】:在尝试将liquibase:hibernate插件与spring-boot:gradle:postgres集成时,我在运行gradlediff命令时... 查看详情

无法与 liquibase gradle 插件生成差异

】无法与liquibasegradle插件生成差异【英文标题】:Unabletogeneratedifferencefromliquibasegradleplugin【发布时间】:2016-06-1311:38:56【问题描述】:我正在尝试使用MYSQL数据库在现有SpringBoot项目中实现liquibase。我希望能够生成更改集,指定实... 查看详情

Liquibase Maven 无法读取 changeLogFile

】LiquibaseMaven无法读取changeLogFile【英文标题】:LiquibaseMavencan\'treadchangeLogFile【发布时间】:2017-08-1001:11:45【问题描述】:根据我的Filestructure我遇到了错误liquibase.exception.SetupException:文件:/src/main/liquibase/changes/000-initial-schema.xml... 查看详情

Liquibase 与数据库交互

】Liquibase与数据库交互【英文标题】:LiquibasewithDatabaseinteraction【发布时间】:2015-10-2008:48:31【问题描述】:我正在研究Liquibase以将数据库与Spring集成。我想问:是否有任何插件或类似的东西用于通过liquibase自动保存数据库中的... 查看详情

在 Liquibase 4.0 中删除了通过绝对路径指定文件

】在Liquibase4.0中删除了通过绝对路径指定文件【英文标题】:SpecifyingfilesbyabsolutepathwasremovedinLiquibase4.0【发布时间】:2021-10-2218:08:42【问题描述】:我在运行SpringBoot应用程序时收到以下liquibase错误:。请使用相对路径或在类路径... 查看详情

在生产环境中执行 liquibase 更新

】在生产环境中执行liquibase更新【英文标题】:Executeliquibaseupdateinproductionenvironment【发布时间】:2013-11-2901:03:00【问题描述】:我有一个JavaMaven项目。我正在使用liquibase来更新数据库。在本地,要更新我的数据库,我只是在命令... 查看详情

如何修复“在当前项目和插件组中找不到前缀'liquibase'的插件”

】如何修复“在当前项目和插件组中找不到前缀\\\'liquibase\\\'的插件”【英文标题】:Howtofix"Nopluginfoundforprefix\'liquibase\'inthecurrentprojectandintheplugingroups"如何修复“在当前项目和插件组中找不到前缀\'liquibase\'的插件”【发... 查看详情

Surefire Maven 插件:“通过直接写入分叉 JVM 中的本机流来破坏 STDOUT”

】SurefireMaven插件:“通过直接写入分叉JVM中的本机流来破坏STDOUT”【英文标题】:SurefireMavenplugin:"CorruptedSTDOUTbydirectlywritingtonativestreaminforkedJVM"【发布时间】:2019-08-1120:40:45【问题描述】:我的JUnit测试在通过Maven和Surefire... 查看详情

Liquibase 看不到实体的变化

】Liquibase看不到实体的变化【英文标题】:Liquibasedonotseechangesinentities【发布时间】:2015-01-2309:16:05【问题描述】:我正在尝试使用liquibase配置简单的maven项目。我有很多关于liquibase-maven-plugin和liquibase-hibernate4版本的问题,它们不... 查看详情

从自定义 mojo 访问 maven 插件的运行时配置的最佳方式?

...的方法是什么?【问题讨论】:【参考方案1】:您可以通过以下步骤获取当前 查看详情

从 databasechangelog 读取 Liquibase 需要很长时间

】从databasechangelog读取Liquibase需要很长时间【英文标题】:Liquibasereadingfromdatabasechangelogtakesalongtime【发布时间】:2012-06-1312:14:00【问题描述】:有没有什么方法可以加快liquibase回滚和更新操作的maven任务?我现在在数据库中有大... 查看详情

编译插件时:maven 报错

】编译插件时:maven报错【英文标题】:Whencompilingplugins:maventhrowsanerror【发布时间】:2021-11-2710:50:20【问题描述】:编译插件时:maven抛出错误Failedtoexecutegoalorg.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile(default-compile)onprojectuser-lib 查看详情