Spring Boot集成H2数据库重启丢失数据,求持久化解决方案
解决Spring Boot中H2数据库重启数据丢失问题
核心问题原因
你当前配置里的spring.datasource.url使用了mem:前缀,这是H2的内存数据库模式——数据仅存储在JVM内存中,应用重启后内存释放,数据自然丢失。
具体配置修改方案
只需要修改application.properties中的数据源URL,将内存模式改为文件持久化模式即可:
1. 修改数据源URL
把原来的配置:
spring.datasource.url=jdbc:h2:mem:ecommerce
替换为以下两种方式之一:
方式一:相对路径存储(数据保存在项目根目录下)
spring.datasource.url=jdbc:h2:file:./h2-data/ecommerce;DB_CLOSE_ON_EXIT=FALSE
./h2-data/表示项目根目录下的h2-data文件夹(不存在会自动创建)ecommerce是数据库名称,对应生成的文件为ecommerce.mv.dbDB_CLOSE_ON_EXIT=FALSE确保应用关闭时不会强制关闭数据库,避免数据写入异常
方式二:绝对路径存储(指定固定磁盘位置)
如果需要把数据存在固定路径,可根据操作系统调整:
# Linux/macOS示例 spring.datasource.url=jdbc:h2:file:/opt/h2-db/ecommerce;DB_CLOSE_ON_EXIT=FALSE # Windows示例(路径用/或转义\\) spring.datasource.url=jdbc:h2:file:D:/h2-db/ecommerce;DB_CLOSE_ON_EXIT=FALSE
2. 保留现有正确配置
你的其他配置已符合持久化要求,无需修改:
spring.jpa.hibernate.ddl-auto=update:仅更新表结构,不会删除已有数据或重建表spring.h2.console.enabled=true:依然可以通过H2控制台访问数据库
验证方法
修改配置后重启应用,添加测试数据,再次重启应用后,打开H2控制台(默认地址http://localhost:8080/h2-console),使用修改后的URL连接数据库,即可查看之前保存的数据。
内容的提问来源于stack exchange,提问作者MTR807
相关产品推荐
相关产品推荐

