如何在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,避免启动时清空已有表数据。
验证方式
- 正常启动应用插入测试数据
- 正常关闭应用(不要使用IDE强制终止进程,否则会跳过HSQLDB的shutdown刷盘逻辑)
- 查看项目根目录
./data文件夹,可看到生成的userdb.data文件 - 重启应用即可读取到之前插入的持久化数据
内容的提问来源于stack exchange,提问作者Tristate
相关产品推荐
相关产品推荐

