官网
测试版本:2.1.214,官方网站
嵌入式数据库
- 不需要安装数据库客户端服务端,该数据库为一个Jar包,项目直接引用即可
- 可以用作内存数据库,也可用作文件数据库
- 支持SQL语法
引入
maven
<!-- 没有JDBC不会创建H2文件 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
Gradle
runtimeOnly 'com.h2database:h2'
配置
spring:
# 数据库
datasource:
# url: jdbc:h2:file:~/h2/test
# ./ 表示Jar包所在目录
url: jdbc:h2:file:./h2/db
driver-class-name: org.h2.Driver
username: fan
password: fan
# web访问,浏览器访问配置的路径可以查询数据库
h2:
console:
settings:
web-allow-others: true
path: /h2
enabled: true
一个有意思的事情
在做数据正向工程的时候,需要对H2和MySQL数据库进行兼容,除了数据库不一样以外,其他环境均一摸一样,执行的过程中偶然发现以下结果:

H2数据库居然比MySQL查询快!
虽然这只是简单的查询,不是复杂场景,但是速度居然快了6倍
查看表结构
SHOW COLUMNS FROM `user`;
注意
在真实使用过程中,遇到多次数据回退问题,不知道是磁盘没有及时持久化还是什么原因,重要项目慎用
再次使用
spring:
application:
name: fancy
# 数据库
datasource:
# ./ 表示Jar包所在目录
# DB_CLOSE_DELAY=-1 作用:即使最后一个数据库连接关闭了,H2 也不关闭数据库实例
# -1 的含义:无限等待,永不自动关闭
# 默认行为:如果不设置,最后一个连接关闭后,数据库会在几秒后自动关闭
# DB_CLOSE_ON_EXIT=FALSE 作用:JVM(Java 虚拟机)退出时,不强制关闭数据库
# FALSE 的含义:JVM 退出时,数据库自己决定何时关闭
# 默认行为:如果不设置,JVM 退出时会尝试关闭数据库
url: jdbc:h2:file:./h2/db;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
driver-class-name: org.h2.Driver
username: fancy
password: fancy
# web访问,浏览器访问配置的路径可以查询数据库
h2:
console:
settings:
web-allow-others: true
path: /h2
enabled: true