在SpringBoot中集成H2數(shù)據(jù)庫的完整指南
引言
Spring Boot是一個(gè)簡化企業(yè)級(jí)Java應(yīng)用程序開發(fā)的強(qiáng)大框架。H2數(shù)據(jù)庫是一個(gè)輕量級(jí)的、開源的SQL數(shù)據(jù)庫,非常適合用于開發(fā)和測試。本文將指導(dǎo)您如何在Spring Boot應(yīng)用程序中集成H2數(shù)據(jù)庫,并探索一些高級(jí)配置選項(xiàng)。
依賴關(guān)系
首先,我們需要在項(xiàng)目的pom.xml文件中添加H2數(shù)據(jù)庫和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ù)庫配置
Spring Boot默認(rèn)配置應(yīng)用程序連接到一個(gè)內(nèi)存存儲(chǔ)的H2數(shù)據(jù)庫,用戶名為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ù)庫持久化
默認(rèn)情況下,H2數(shù)據(jù)庫的內(nèi)存存儲(chǔ)在應(yīng)用程序重啟后會(huì)導(dǎo)致數(shù)據(jù)丟失。為了解決這個(gè)問題,我們可以將數(shù)據(jù)庫存儲(chǔ)為文件:
spring.datasource.url=jdbc:h2:file:/data/demo
或者在YAML文件中:
spring: datasource: url: jdbc:h2:file:/data/demo
數(shù)據(jù)庫操作
在Spring Boot中執(zhí)行CRUD操作與在其他SQL數(shù)據(jù)庫中類似。我們可以使用JPA倉庫接口和實(shí)體類來管理數(shù)據(jù)庫操作。
初始化數(shù)據(jù)源
我們可以使用SQL腳本來初始化數(shù)據(jù)庫。在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ù)庫。我們可以通過將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ù)庫遷移工具保持一致。當(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ù)庫內(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)。在登錄頁面使用配置的數(shù)據(jù)庫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ù)庫URL選項(xiàng)
H2數(shù)據(jù)庫URL提供了多種選項(xiàng)以進(jìn)一步自定義數(shù)據(jù)庫行為。例如:
DB_CLOSE_DELAY=-1
:確保在JVM運(yùn)行期間數(shù)據(jù)庫保持打開狀態(tài)。DB_CLOSE_ON_EXIT=FALSE
:即使JVM關(guān)閉,數(shù)據(jù)庫也保持打開狀態(tài)。AUTO_RECONNECT=TRUE
:允許在連接丟失時(shí)自動(dòng)重新連接。MODE=PostgreSQL
:將H2數(shù)據(jù)庫設(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ù)庫與Spring Boot的集成非常流暢,提供了一個(gè)輕量級(jí)且功能豐富的解決方案,非常適合開發(fā)和測試。通過本文的指南,您應(yīng)該能夠輕松地在Spring Boot應(yīng)用程序中集成H2數(shù)據(jù)庫,并利用其強(qiáng)大的功能。
以上就是在SpringBoot中集成H2數(shù)據(jù)庫的完整指南的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot集成H2數(shù)據(jù)庫的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Springboot集成定時(shí)器和多線程異步處理操作
這篇文章主要介紹了Springboot集成定時(shí)器和多線程異步處理操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-09-09基于Java網(wǎng)絡(luò)編程和多線程的多對(duì)多聊天系統(tǒng)
這篇文章主要介紹了基于Java網(wǎng)絡(luò)編程和多線程的多對(duì)多聊天系統(tǒng),文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java網(wǎng)絡(luò)編程的小伙伴們有非常好的幫助,需要的朋友可以參考下2021-04-04Shiro實(shí)現(xiàn)session限制登錄數(shù)量踢人下線功能
這篇文章主要介紹了Shiro實(shí)現(xiàn)session限制登錄數(shù)量踢人下線,本文記錄的是shiro采用session作為登錄方案時(shí),對(duì)用戶進(jìn)行限制數(shù)量登錄,以及剔除下線,需要的朋友可以參考下2023-11-11Java?中導(dǎo)入excel時(shí)使用?trim()?無法去除空格的問題解決方案
這篇文章主要介紹了Java中導(dǎo)入excel時(shí)使用trim()無法去除空格的解決方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-06-06Java 讀取、獲取配置文件.properties中的數(shù)據(jù)
這篇文章主要介紹了Java 讀取、獲取配置文件.properties中的數(shù)據(jù),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-09-09springboot啟動(dòng)腳本start.sh和停止腳本 stop.sh的詳細(xì)教程
這篇文章主要介紹了springboot啟動(dòng)腳本start.sh和停止腳本 stop.sh的詳細(xì)教程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08