H2的嵌入式數據庫在哪裡存儲數據?
- Spring Boot
- H2
- java
1.簡介
在本文中,我們將學習如何配置Spring Boot應用程序以使用嵌入式H2數據庫,然後查看H2的嵌入式數據庫在何處存儲數據。
H2數據庫是一個輕量級的開源數據庫,目前尚無商業支持。我們可以在多種模式下使用它:
- 服務器模式–用於通過JDBC或ODBC通過TCP / IP進行遠程連接
- 嵌入式模式–適用於使用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
屬性配置存儲模式。 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
–用於處理斑點或龐大的結果集 -
demodb.newFile
– H2使用此文件進行數據庫壓縮,並且包含一個新的數據庫存儲文件 -
demodb.oldFile
– H2還使用此文件進行數據庫壓縮,並且包含舊的數據庫存儲文件
4. H2的嵌入式數據庫存儲位置
H2在存儲數據庫文件方面非常靈活。現在,我們可以將其存儲目錄配置為:
- 磁盤上的目錄
- 當前用戶目錄
- 當前項目目錄或工作目錄
4.1磁盤上的目錄
我們可以設置一個特定的目錄位置來存儲我們的數據庫文件:
spring.datasource.url=jdbc:h2:file:C:/data/demodb
注意,在此連接字符串中,最後一個塊引用數據庫名稱。同樣,即使我們錯過了此數據源連接URL中的file關鍵字,H2也會對其進行管理並在提供的位置創建文件。
4.2當前用戶目錄
如果我們想將數據庫文件存儲在當前用戶目錄中,我們將使用在file
關鍵字(~)
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
請注意,如果該子目錄不存在,它將自動創建。
5.結論
在這個簡短的教程中,我們討論了H2數據庫的某些方面,並展示了H2的嵌入式數據庫在哪裡存儲數據。我們還學習瞭如何配置數據庫文件的位置。