1. 简介
在本文中,我们将探讨如何配置 Spring Boot 应用以使用嵌入式的 H2 数据库,并深入了解 H2 数据库存储数据的位置。
H2 数据库 是一款轻量级、开源的数据库,目前没有商业支持。它支持多种运行模式:
- Server 模式:通过 TCP/IP 使用 JDBC 或 ODBC 进行远程连接
- Embedded 模式:使用 JDBC 进行本地连接
- Mixed 模式:同时支持本地和远程连接
虽然 H2 可以配置为 内存数据库,但它也支持持久化存储(即将数据写入磁盘)。本文重点讨论的是 H2 在嵌入式模式下启用持久化存储的场景,即数据会实际落盘。
2. 配置嵌入式 H2 数据库
若要在 Spring Boot 中使用 H2 数据库,我们需要在 pom.xml 文件中添加以下两个 Maven 依赖:
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.200</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<version>2.3.4.RELEASE</version>
</dependency>
✅ 注意:这两个依赖缺一不可,前者是数据库驱动,后者是 Spring Data JPA 的启动器。
3. H2 嵌入式持久化模式
前面提到,H2 支持将数据存储在文件系统中。相比内存模式,文件存储的最大优势在于应用重启后数据不会丢失。
我们可以通过在 application.properties 文件中配置 spring.datasource.url
属性来控制 H2 的存储方式:
- 内存模式(in-memory)示例:
spring.datasource.url=jdbc:h2:mem:demodb
- 文件持久化模式则需替换掉
mem
参数,使用文件路径相关参数。
H2 创建的文件类型
当启用持久化时,H2 会在磁盘上创建以下几种文件:
demodb.mv.db
:✅ 核心文件,包含数据、事务日志和索引demodb.lock.db
:🔒 数据库锁文件,数据库使用时自动创建demodb.trace.db
:📜 跟踪日志文件demodb.123.temp.db
:🧯 用于处理大对象(BLOB)或临时结果集demodb.newFile
:📦 数据库压缩时使用,保存新版本数据demodb.oldFile
:🗑️ 数据库压缩时使用,保存旧版本数据
⚠️ 实际开发中,通常只需关注 .mv.db
和 .lock.db
文件。
4. H2 数据库存储位置配置
H2 提供了非常灵活的存储路径配置方式,可以指定以下几种目录:
4.1. 指定磁盘目录
你可以明确指定一个磁盘路径来存储数据库文件:
spring.datasource.url=jdbc:h2:file:C:/data/demodb
📌 注意:URL 中最后一部分是数据库名。即使省略 file:
关键字,H2 也会自动识别路径并创建文件。
4.2. 当前用户目录
使用波浪号 ~
表示当前用户的主目录:
spring.datasource.url=jdbc:h2:file:~/demodb
在 Windows 系统中,这通常对应路径为:C:/Users/<当前用户名>
。
若想存储在用户目录下的子目录中:
spring.datasource.url=jdbc:h2:file:~/subdirectory/demodb
✅ 如果子目录不存在,H2 会自动创建。
4.3. 当前工作目录
使用 .
表示当前项目的工作目录(即应用启动目录):
spring.datasource.url=jdbc:h2:file:./demodb
存储在子目录中:
spring.datasource.url=jdbc:h2:file:./subdirectory/demodb
⚠️ 同样,子目录不存在时会自动创建。
5. 总结
本文简要介绍了 H2 数据库的嵌入式持久化机制,并详细说明了其在不同路径下的数据存储方式。通过合理配置 spring.datasource.url
,我们可以灵活控制数据库文件的存储位置。
完整代码示例可从 GitHub 获取。