
H2数据库[1]的特点:
非常快,开源,支持JDBC API
嵌入式和服务器模式;内存数据库
基于浏览器的控制台应用程序
占用空间小,jar只有2MB大小
以上只是官网列出的特点。
由于本身是由纯Java其实还有跨平台的优势,支持目前常见的大部分平台。
和其他常见数据库之间的对比如下:

嵌入式数据库。由于额外的资源占用较少,所以比较适合需要嵌入式数据的场景。
快速数据处理。临时想用SQL来做一些数据的处理的工作,又不想安装MySQL服务器之类的软件,那么H2可以快速投入使用。
所有的数据库引擎行为都会有一定的差异。H2除了支持ANSI SQL标准之外,也尝试对其他数据库做一些兼容[2](MODE=XX)。
比如,MYSQL默认是大小写不敏感,H2是大小写敏感。实际上,H2也支持大小写不敏感,只需要在创建数据库添加参数IGNORECASE=TRUE,比如jdbc:h2:~/test;IGNORECASE=TRUE
需要注意的是,兼容模式不代表所有的差异都已经被处理,实际实现的只有一小部分差异的子集。可以兼容的数据库有DB2,Derby,HSQLDB,MS SQL Server,MySQL,Oracle,PostgreSQL,Ignite。
比如兼容DB2的SQL模式,可以如下来配置:
jdbc:h2:~/test;MODE=DB2
Spring Boot集成其实非常简单,只需要添加依赖和配置数据源即可。
笔者用的是maven来管理依赖,因此在POM文件中添加H2的依赖。由于我同时使用了Druid的数据库连接池,所以也添加了Druid的jar包。
<dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId></dependency><dependency><groupId>com.h2database</groupId><artifactId>h2</artifactId><scope>runtime</scope></dependency>
注意,这里配置的时候不需要配置版本号,因为在引入spring-boot-dependencies BOM的时候,已经自带了版本号的配置。
比如笔者使用的spring-boot版本是2.4.2,可以看到在spring-boot-dependencies-2.4.2.pom文件中的H2数据库的版本是
<h2.version>1.4.200</h2.version>
接下来,我们通过Spring的应用程序属性字段来配置数据源,达到使用H2的效果。笔者用的是application.yaml,配置如下。如果使用application.properties,配置是完全一样的。
spring:datasource:#Fully qualified name of the connection pool implementation to use. By default, it is auto-detected from the classpath.#数据库连接池type: com.alibaba.druid.pool.DruidDataSource# 驱动# Fully qualified name of the JDBC driver. Auto-detected based on the URL by default.driver-class-name: org.h2.Driver#数据库连接地址# h2 内存数据库 内存模式连接配置 库名: testdburl: jdbc:h2:mem:testdbusername: sapassword:# # 初始化数据表 DDL# schema: classpath:sql/init.sql# # 初始化数据 DML# data: classpath:sql/data.sqlh2:console:enabled: truesettings:# 开启h2 console 跟踪 方便调试 默认 falsetrace: true# 允许console 远程访问 默认falseweb-allow-others: true# h2 访问路径上下文path: h2-console
配置完成之后,启动应用程序,数据库就会自动生成。
这是这么做到的呢?
程序启动时,确保h2*.jar在classpath上
使用H2的org.h2.Driver
通过H2的UR(比如:jdbc:h2:~/test)来打开在Home目录下的test数据库
数据库会由H2自动创建。
由于我们在application.yaml中配置了H2的控制台,因此我们可以通过浏览器连接数据库。在地址栏中输入http://localhost:9001/h2-console就可以进入H2数据的控制台。
注意:红框中的要和配置的保持一致。如果没有配置密码,则直接连Connect就可以进入DB。

进入数据之后,界面主要分为左右两边,左边是数据库,右边是操作区。如下:

如果要想数据保存的话,那么可以将数据库从内存数据库修改到文件系统。
内嵌式数据库:
jdbc:h2:~/test 'test' in the user home directoryjdbc:h2:/data/test 'test' in the directory /datajdbc:h2:./test in the current(!) working directory
内存数据库
jdbc:h2:mem:test multiple connections in one processjdbc:h2:mem: unnamed private; one connection
服务器模式
启动服务:
java -cp *.jar org.h2.tools.Server
连接:
jdbc:h2:tcp://localhost/~/test user home dirjdbc:h2:tcp://localhost//data/test absolute dir
配置H2服务器:
jdbc:h2:..;MODE=MySQL compatibility (or HSQLDB,...)jdbc:h2:..;TRACE_LEVEL_FILE=3 log to *.trace.db
本文中,我们考察了H2数据的特点、应用场景、兼容性,以及如何和当下流行的Spring框架集成。可以看出,H2是一款小巧但是完备的数据库,在测试、临时数据处理、内嵌式快速开发上很有特点。
接下来,我将会尽量选择一些有趣的干活内容来尝试写作,可以保证的是,干货满满。
参考:
[1] 官网地址:http://www.h2database.com/html/main.html
[2] H2的SQL兼容性:http://www.h2database.com/html/features.html#compatibility
[3] Spring Aplication Properties:https://docs.spring.io/spring-boot/docs/current/reference/html/application-properties.html#application-properties
[4] https://segmentfault.com/a/1190000020636564
欢迎关注公众号:




