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

Posted

技术标签:

【中文标题】通过 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。

我会为此发布一个问题。

【讨论】:

以上是关于通过 maven liquibase 插件填充时,Hsqldb 没有数据的主要内容,如果未能解决你的问题,请参考以下文章

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

Liquibase Maven 无法读取 changeLogFile

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

Liquibase 和 JPA 注释实体

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

无法与 liquibase gradle 插件生成差异