You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Spring Boot 2搭配HSQLDB时生成.data文件实现持久化

解决方案

核心原因

HSQLDB默认配置未开启自动刷盘与正常关闭持久化逻辑,且默认表类型为memory仅将初始化语句写入.script,运行时数据不会落盘到.data文件,同时数据库文件存放路径选择不合理也会导致数据被覆盖。

具体修改步骤

1. 修改数据源URL,添加HSQLDB持久化参数

在原有JDBC URL后追加以下参数:

  • shutdown=true:最后一个数据库连接关闭时自动执行SHUTDOWN命令,将内存数据刷入磁盘
  • hsqldb.default_table_type=cached:将默认表类型设为cached,该类型表的数据会持久化到.data文件
  • hsqldb.write_delay=false:关闭写入延迟,数据变更实时刷盘,避免意外进程中断丢失数据
  • hsqldb.checkpoint_interval=1000:每执行1000次写操作自动执行 checkpoint 落盘,降低数据丢失风险

同时将数据库文件存放路径从src/main/resources改为项目根目录下的独立data文件夹,避免构建打包时被源码文件覆盖:

spring.datasource.driver-class-name=org.hsqldb.jdbc.JDBCDriver
spring.datasource.url=jdbc:hsqldb:file:./data/userdb;shutdown=true;hsqldb.default_table_type=cached;hsqldb.write_delay=false;hsqldb.checkpoint_interval=1000
spring.jpa.database-platform=org.hibernate.dialect.HSQLDialect
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.hibernate.ddl-auto=update

2. 可选适配配置

如果使用Spring Boot 2默认的Hikari连接池,可添加连接初始化SQL确保表类型配置全局生效:

spring.datasource.hikari.connection-init-sql=SET DATABASE DEFAULT TABLE TYPE CACHED

注意不要将spring.jpa.hibernate.ddl-auto修改为create/create-drop,避免启动时清空已有表数据。

验证方式

  1. 正常启动应用插入测试数据
  2. 正常关闭应用(不要使用IDE强制终止进程,否则会跳过HSQLDB的shutdown刷盘逻辑)
  3. 查看项目根目录./data文件夹,可看到生成的userdb.data文件
  4. 重启应用即可读取到之前插入的持久化数据

内容的提问来源于stack exchange,提问作者Tristate

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 12:45:07