1. 概述
H2 是一个轻量级的 Java 嵌入式数据库,因其启动快、配置简单,常用于开发和测试环境。Spring Boot 对 H2 提供了开箱即用的支持,无论是内存模式还是文件模式,都能轻松集成。
本文将带你一步步掌握如何在 Spring Boot 项目中集成 H2 数据库,包括依赖配置、初始化脚本、控制台访问等内容。
2. 添加依赖
要使用 H2,首先需要在 pom.xml
中添加如下依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
✅ spring-boot-starter-data-jpa
提供了 JPA 支持,是与数据库交互的基础
✅ h2
依赖用于引入 H2 数据库驱动,runtime
范围表示仅在运行时使用
3. 数据库配置
默认情况下,Spring Boot 会使用内存数据库,用户名为 sa
,密码为空。我们可以通过 application.properties
或 application.yaml
自定义配置。
使用 properties 配置:
spring.datasource.url=jdbc:h2:mem:mydb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=password
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
使用 YAML 配置:
spring:
datasource:
url: jdbc:h2:mem:mydb
username: sa
password: password
driverClassName: org.h2.Driver
jpa:
database-platform: org.hibernate.dialect.H2Dialect
⚠️ spring.jpa.database-platform
必须设置为 H2Dialect
,否则 Hibernate 可能无法识别 H2 的方言
4. 数据库持久化配置
默认的内存数据库在应用重启后数据会丢失。如果你希望数据持久化保存,可以改为使用文件存储:
spring.datasource.url=jdbc:h2:file:/data/demo
或 YAML:
spring:
datasource:
url: jdbc:h2:file:/data/demo
这样数据库内容会被写入磁盘,重启后数据不会丢失。
5. 数据库操作
5.1 初始化数据脚本
Spring Boot 支持通过 data.sql
文件初始化数据。将如下内容放在 src/main/resources/data.sql
:
INSERT INTO countries (id, name) VALUES (1, 'USA');
INSERT INTO countries (id, name) VALUES (2, 'France');
INSERT INTO countries (id, name) VALUES (3, 'Brazil');
INSERT INTO countries (id, name) VALUES (4, 'Italy');
INSERT INTO countries (id, name) VALUES (5, 'Canada');
✅ Spring Boot 会在应用启动时自动执行该脚本
✅ 适用于测试数据或基础数据初始化
若要禁用此行为,设置:
spring.sql.init.mode=never
5.2 Hibernate 与 data.sql 的执行顺序
默认情况下,data.sql
会在 Hibernate 初始化之前执行。如果你希望它在 Hibernate 生成 schema 之后执行,需添加:
spring.jpa.defer-datasource-initialization=true
⚠️ 如果你同时使用了 schema.sql
和 Hibernate 自动生成 schema,可能会导致冲突,不推荐混合使用
6. 访问 H2 控制台
H2 提供了一个 Web 控制台,可以用来查看表结构、执行 SQL 语句等。默认是关闭的,需要手动开启。
启用控制台:
spring.h2.console.enabled=true
或 YAML:
spring:
h2:
console.enabled: true
启动应用后访问:http://localhost:8080/h2-console
输入你在配置中设置的用户名和密码即可登录。
登录后可以查看表结构并执行 SQL 查询:
控制台高级配置:
spring.h2.console.path=/h2-console
spring.h2.console.settings.trace=false
spring.h2.console.settings.web-allow-others=false
或 YAML:
spring:
h2:
console:
path: /h2-console
settings.trace: false
settings.web-allow-others: false
✅ path
可以自定义访问路径
✅ web-allow-others
设置为 false 可防止远程访问,增强安全性
7. H2 数据库 URL 配置选项
H2 提供了多种 URL 参数用于控制数据库行为:
参数 | 说明 |
---|---|
DB_CLOSE_DELAY=-1 |
JVM 关闭前保持数据库连接 |
DB_CLOSE_ON_EXIT=FALSE |
禁止 JVM 关闭时自动关闭数据库 |
AUTO_RECONNECT=TRUE |
自动重连,适用于网络不稳定场景 |
MODE=PostgreSQL |
模拟 PostgreSQL 行为(也支持 MySQL、Oracle 等) |
示例配置:
spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE;AUTO_RECONNECT=TRUE;MODE=PostgreSQL;
✅ 适用于需要模拟其他数据库行为的场景,比如测试兼容性
8. 总结
H2 是一个轻量、快速、支持多种模式的数据库,非常适合在 Spring Boot 项目中用于开发和测试。结合其 Web 控制台和脚本初始化功能,可以极大提升开发效率。
完整示例代码可在 GitHub 上找到。