H2的嵌入式数据库数据存储
1. 简介
在本文中,我们将学习如何配置 Spring Boot 应用程序以使用嵌入式H2 数据库 ,然后了解 H2 的嵌入式数据库存储数据的位置。
H2 数据库 是一个轻量级的开源数据库,目前还没有商业支持。我们可以在各种模式下使用它:
- 服务器模式——用于通过 TCP/IP 使用 JDBC 或 ODBC 的远程连接
- 嵌入模式——用于使用 JDBC 的本地连接
- 混合模式——这意味着我们可以将 H2 用于本地和远程连接
H2 可以配置为作为内存数据库 运行,但它也可以是持久的,例如,它的数据将存储在磁盘上。出于本教程的目的,我们将在启用持久性的嵌入式模式下使用 H2 数据库,以便我们将数据存储在磁盘上。
2. 嵌入式H2数据库
如果我们想使用 H2 数据库,我们需要将h2 和spring-boot-starter-data-jpa Maven 依赖项添加到我们的pom.xml文件中:
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<versionId>1.4.200</versionId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<versionId>2.3.4.RELEASE</versionId>
</dependency>
3. H2的嵌入式持久化模式
我们已经提到 H2 可以使用文件系统来存储数据库数据。与内存中的方法相比,这种方法的最大优点是应用程序重启后数据库数据不会丢失。
我们可以通过application.properties文件中的spring.datasource.url属性配置存储模式。这样,我们就可以通过在数据源 URL 中添加mem参数,然后是数据库名称,将 H2 数据库设置为使用内存方法:
spring.datasource.url=jdbc:h2:mem:demodb
如果我们使用基于文件的持久化模式,我们将为磁盘位置设置可用选项之一而不是mem参数。在下一节中,我们将讨论这些选项是什么。
让我们看看 H2 数据库创建了哪些文件:
- demodb.mv.db – 与其他文件不同,此文件始终被创建并且包含数据、事务日志和索引
- demodb.lock.db – 这是一个数据库锁文件,H2 在使用数据库时重新创建它
- *demodb.trace.db——*这个文件包含跟踪信息
- demodb.123.temp.db – 用于处理 blob 或巨大的结果集
- demodb.newFile – H2 使用此文件进行数据库压缩,它包含一个新的数据库存储文件
- demodb.oldFile ——H2 也使用这个文件进行数据库压缩,它包含旧的数据库存储文件
4. H2的嵌入式数据库存储位置
H2 在数据库文件的存储方面非常灵活。此时我们可以配置它的存放目录为:
- 磁盘目录
- 当前用户目录
- 当前项目目录或工作目录
4.1. 磁盘目录
我们可以设置一个特定的目录位置来存储我们的数据库文件:
spring.datasource.url=jdbc:h2:file:C:/data/demodb
请注意,在此连接字符串中,最后一个块引用数据库名称。此外,即使我们错过了此数据源连接 URL 中的文件关键字,H2 也会对其进行管理并在提供的位置创建文件。
4.2. 当前用户目录
如果我们想将数据库文件存储在当前用户目录中,我们将使用在文件关键字后包含波浪号*(~)*的数据源 URL :
spring.datasource.url=jdbc:h2:file:~/demodb
例如,在 Windows 系统中,此目录将为C:/Users/current_user。
将数据库文件存放在当前用户目录的子目录下:
spring.datasource.url=jdbc:h2:file:~/subdirectory/demodb
请注意,如果该子目录不存在,它将自动创建。
4.3. 当前工作目录
当前工作目录是应用程序启动的目录,它在数据源 URL 中被引用为一个点 (.)。如果我们想要那里的数据库文件,我们将按如下方式配置它:
spring.datasource.url=jdbc:h2:file:./demodb
将数据库文件存储在当前工作目录的子目录中:
spring.datasource.url=jdbc:h2:file:./subdirectory/demodb
请注意,如果子目录不存在,它将自动创建。