在SpringBoot中集成H2數(shù)據(jù)庫(kù)的完整指南
引言
Spring Boot是一個(gè)簡(jiǎn)化企業(yè)級(jí)Java應(yīng)用程序開發(fā)的強(qiáng)大框架。H2數(shù)據(jù)庫(kù)是一個(gè)輕量級(jí)的、開源的SQL數(shù)據(jù)庫(kù),非常適合用于開發(fā)和測(cè)試。本文將指導(dǎo)您如何在Spring Boot應(yīng)用程序中集成H2數(shù)據(jù)庫(kù),并探索一些高級(jí)配置選項(xiàng)。
依賴關(guān)系
首先,我們需要在項(xiàng)目的pom.xml文件中添加H2數(shù)據(jù)庫(kù)和Spring Data JPA的依賴關(guān)系:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
數(shù)據(jù)庫(kù)配置
Spring Boot默認(rèn)配置應(yīng)用程序連接到一個(gè)內(nèi)存存儲(chǔ)的H2數(shù)據(jù)庫(kù),用戶名為sa,密碼為空。我們可以通過在application.properties文件中添加以下屬性來自定義這些設(shè)置:
spring.datasource.url=jdbc:h2:mem:testdb spring.datasource.driverClassName=org.h2.Driver spring.datasource.username=sa spring.datasource.password=password spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
或者,我們也可以使用application.yml文件進(jìn)行配置:
spring:
datasource:
url: jdbc:h2:mem:mydb
username: sa
password: password
driverClassName: org.h2.Driver
jpa:
database-platform: org.hibernate.dialect.H2Dialect
數(shù)據(jù)庫(kù)持久化
默認(rèn)情況下,H2數(shù)據(jù)庫(kù)的內(nèi)存存儲(chǔ)在應(yīng)用程序重啟后會(huì)導(dǎo)致數(shù)據(jù)丟失。為了解決這個(gè)問題,我們可以將數(shù)據(jù)庫(kù)存儲(chǔ)為文件:
spring.datasource.url=jdbc:h2:file:/data/demo
或者在YAML文件中:
spring:
datasource:
url: jdbc:h2:file:/data/demo
數(shù)據(jù)庫(kù)操作
在Spring Boot中執(zhí)行CRUD操作與在其他SQL數(shù)據(jù)庫(kù)中類似。我們可以使用JPA倉(cāng)庫(kù)接口和實(shí)體類來管理數(shù)據(jù)庫(kù)操作。
初始化數(shù)據(jù)源
我們可以使用SQL腳本來初始化數(shù)據(jù)庫(kù)。在src/main/resources目錄下創(chuàng)建一個(gè)SQL文件,填充一些示例數(shù)據(jù):
INSERT INTO countries (id, name) VALUES (1, 'USA'); INSERT INTO countries (id, name) VALUES (2, 'France'); INSERT INTO countries (id, name) VALUES (3, 'Brazil'); INSERT INTO countries (id, name) VALUES (4, 'Italy'); INSERT INTO countries (id, name) VALUES (5, 'Canada');
Spring Boot會(huì)自動(dòng)運(yùn)行這個(gè)文件來初始化數(shù)據(jù)庫(kù)。我們可以通過將spring.sql.init.mode屬性設(shè)置為never來禁用這種默認(rèn)行為。此外,還可以配置多個(gè)SQL文件來加載初始數(shù)據(jù)。
Hibernate和data.sql
默認(rèn)情況下,data.sql腳本在Hibernate初始化之前執(zhí)行。這使得基于腳本的初始化與Flyway和Liquibase等其他數(shù)據(jù)庫(kù)遷移工具保持一致。當(dāng)我們每次重新創(chuàng)建Hibernate生成的模式時(shí),我們需要設(shè)置一個(gè)額外的屬性:
spring.jpa.defer-datasource-initialization=true
這會(huì)修改默認(rèn)的Spring Boot行為,并在Hibernate生成模式之后填充數(shù)據(jù)。
訪問H2控制臺(tái)
H2提供了一個(gè)嵌入式的GUI控制臺(tái),用于瀏覽數(shù)據(jù)庫(kù)內(nèi)容和運(yùn)行SQL查詢。要啟用H2控制臺(tái),在application.properties中添加以下屬性:
spring.h2.console.enabled=true
或者在application.yml中:
spring:
h2:
console:
enabled: true
啟動(dòng)應(yīng)用程序后,訪問http://localhost:8080/h2-console即可使用H2控制臺(tái)。在登錄頁(yè)面使用配置的數(shù)據(jù)庫(kù)URL和憑據(jù)進(jìn)行登錄。
進(jìn)一步配置H2控制臺(tái)
我們可以通過在項(xiàng)目的application.properties中指定以下屬性來進(jìn)一步配置控制臺(tái):
spring.h2.console.path=/h2-console spring.h2.console.settings.trace=false spring.h2.console.settings.web-allow-others=false
或者在YAML配置中:
spring:
h2:
console:
path: /h2-console
settings:
trace: false
web-allow-others: false
H2數(shù)據(jù)庫(kù)URL選項(xiàng)
H2數(shù)據(jù)庫(kù)URL提供了多種選項(xiàng)以進(jìn)一步自定義數(shù)據(jù)庫(kù)行為。例如:
DB_CLOSE_DELAY=-1:確保在JVM運(yùn)行期間數(shù)據(jù)庫(kù)保持打開狀態(tài)。DB_CLOSE_ON_EXIT=FALSE:即使JVM關(guān)閉,數(shù)據(jù)庫(kù)也保持打開狀態(tài)。AUTO_RECONNECT=TRUE:允許在連接丟失時(shí)自動(dòng)重新連接。MODE=PostgreSQL:將H2數(shù)據(jù)庫(kù)設(shè)置為PostgreSQL兼容模式。
示例配置:
spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE;AUTO_RECONNECT=TRUE;MODE=PostgreSQL;
結(jié)論
H2數(shù)據(jù)庫(kù)與Spring Boot的集成非常流暢,提供了一個(gè)輕量級(jí)且功能豐富的解決方案,非常適合開發(fā)和測(cè)試。通過本文的指南,您應(yīng)該能夠輕松地在Spring Boot應(yīng)用程序中集成H2數(shù)據(jù)庫(kù),并利用其強(qiáng)大的功能。
以上就是在SpringBoot中集成H2數(shù)據(jù)庫(kù)的完整指南的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot集成H2數(shù)據(jù)庫(kù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
java整數(shù)與byte數(shù)組的轉(zhuǎn)換實(shí)現(xiàn)代碼
這篇文章主要介紹了java整數(shù)與byte數(shù)組的轉(zhuǎn)換實(shí)現(xiàn)代碼的相關(guān)資料,需要的朋友可以參考下2017-07-07
SpringMVC表單提交參數(shù)400錯(cuò)誤解決方案
這篇文章主要介紹了SpringMVC表單提交參數(shù)400錯(cuò)誤解決方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10
java實(shí)現(xiàn)統(tǒng)計(jì)字符串中字符及子字符串個(gè)數(shù)的方法示例
這篇文章主要介紹了java實(shí)現(xiàn)統(tǒng)計(jì)字符串中字符及子字符串個(gè)數(shù)的方法,涉及java針對(duì)字符串的遍歷、判斷及運(yùn)算相關(guān)操作技巧,需要的朋友可以參考下2017-01-01
關(guān)于Scanner對(duì)象的輸入結(jié)束標(biāo)記問題
這篇文章主要介紹了關(guān)于Scanner對(duì)象的輸入結(jié)束標(biāo)記問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-05-05
一篇文章帶你學(xué)習(xí)JAVA MyBatis底層原理
近來想寫一個(gè)mybatis的分頁(yè)插件,但是在寫插件之前肯定要了解一下mybatis具體的工作原理吧,本文就詳細(xì)總結(jié)了MyBatis工作原理,,需要的朋友可以參考下2021-09-09
Spring元注解@HttpExchange聲明式調(diào)用HTTP
這篇文章主要介紹了Spring元注解@HttpExchange聲明式調(diào)用HTTP,Spring?Framework6和Spring?Boot3引入了聲明式HTTP客戶端@HttpExchange,通過接口注解簡(jiǎn)化REST?API調(diào)用,核心注解包括@GetExchange、@PostExchange等對(duì)應(yīng)HTTP方法,支持路徑參數(shù)和請(qǐng)求體,需要的朋友可以參考下2025-10-10
JetBrains的IDEA編輯器自動(dòng)配置的JDK版本下載目錄過程
文章說明Java安裝路徑為~/Library/Java/JavaVirtualMachines/ms-17.0.16,并分享配置經(jīng)驗(yàn),建議用戶根據(jù)實(shí)際需求調(diào)整環(huán)境變量,以確保Java版本正確運(yùn)行2025-08-08
使用EasyExcel實(shí)現(xiàn)模板導(dǎo)出Excel數(shù)據(jù)并合并單元格
這篇文章主要為大家詳細(xì)介紹了如何使用EasyExcel實(shí)現(xiàn)模板導(dǎo)出Excel數(shù)據(jù)并合并單元格,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下2026-03-03
springboot HandlerIntercepter攔截器修改request body數(shù)據(jù)的操作
這篇文章主要介紹了springboot HandlerIntercepter攔截器修改request body數(shù)據(jù)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。2021-06-06

