H2数据库简介
H2是一个纯Java编写的轻量级关系型数据库,与擅长支撑大型系统的MySQL、Oracle这类数据库管理系统不同,H2主要用于嵌入式数据库场景以及单元测试。H2本身功能相对简单,它的优势在于与Java生态的无缝整合。这篇笔记我们对H2的安装和使用进行简单介绍。
官方主页:https://www.h2database.com/
嵌入式模式 vs 服务器模式
H2支持两种运行模式,嵌入式模式和服务器模式。
嵌入式模式:嵌入式模式下,应用程序通过H2的JDBC驱动直接访问本地数据库文件,无需独立的数据库服务进程。这种模式下,数据库文件会被当前应用程序独占锁定,其他进程无法同时访问。H2的嵌入式模式非常常用,很多Java开发的桌面客户端程序、小工具、基于SpringBoot的小型单体博客等都会选择H2数据库的嵌入式模式存储数据。
服务器模式:服务器模式下,H2会以独立进程运行并提供网络服务端口,多个客户端通过网络协议可以并发连接访问,这类似于传统的MySQL等数据库服务器的工作方式,这种模式适合需要多个应用或多个连接共享同一个H2数据库的场景。不过实际开发中,基于H2的典型应用场景,我们较少使用服务器模式,H2虽然提供了该功能,但官方和社区都十分不建议将H2作为支撑大型生产环境的数据库服务。
H2管理控制台
H2官网提供了发行包可供下载,解压后在Windows系统下双击执行h2w.bat即可启动H2的管理控制台服务,随后使用浏览器访问http://localhost:8082/login.jsp打开登录页面。登录页面中,连接类型选择Embedded,然后在JDBC URL字段中填写数据库文件的路径,例如jdbc:h2:~/h2/test,点击Connect即可连接。

进入控制台后,我们可以通过图形界面执行SQL、查看表结构、浏览数据,功能与phpMyAdmin类似。

这里需要注意的是,嵌入式模式下管理控制台本身也是一个客户端应用程序,它会对数据库文件加锁。因此当我们的SpringBoot应用程序运行时,若它同样以嵌入式模式访问该数据库文件,管理控制台就无法同时连接。遇到这种情况时,关闭管理控制台服务进程即可,或者直接在SpringBoot项目内部启用内置的H2控制台(后续章节会介绍)。
内存数据库
H2还支持一种特殊的使用方式,内存数据库。这种模式下数据完全存储在内存中,应用程序关闭后数据随之消失,不产生任何磁盘文件。内存数据库模式的JDBC URL写法如下。
jdbc:h2:mem:testdb
这种模式非常适合单元测试场景,每次测试启动时数据库都是全新的空白状态,测试结束后自动清理,不会污染任何持久化文件。SpringBoot的测试框架也对此有很好的支持,我们会在后续章节中具体介绍。