Spring Boot中常用內嵌數據庫(H2、HSQLDB、Derby)的對比,包含配置示例和關鍵差異總結

以下是Spring Boot中常用內嵌數據庫的對比,包含配置示例和關鍵差異總結:


一、主流內嵌數據庫對比

1. H2 數據庫

特點

  • 支持內存模式(速度快)和文件模式(數據持久化)。
  • 支持SQL方言(兼容MySQL/PostgreSQL/Oracle)。
  • 提供Web控制臺(方便調試)。
    適用場景
  • 需要Web控制臺的測試環境。
  • 需要高性能內存數據庫。

配置示例

# application.properties
# 內存模式(數據不持久化)
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=# 啟用H2 Web控制臺(訪問路徑:http://localhost:8080/h2-console)
spring.h2.console.enabled=true

代碼示例

// 測試類(Junit)
@RunWith(SpringRunner.class)
@SpringBootTest
public class H2Test {@Autowiredprivate JdbcTemplate jdbcTemplate;@Testpublic void testH2() {jdbcTemplate.update("CREATE TABLE test (id INT, name VARCHAR(255))");jdbcTemplate.update("INSERT INTO test VALUES (1, 'H2')");List<String> names = jdbcTemplate.queryForList("SELECT name FROM test", String.class);assertEquals("[H2]", names.toString());}
}

2. HSQLDB(HyperSQL)

特點

  • 內存模式和文件模式支持。
  • 輕量級,啟動速度快。
  • 支持SQL標準。
    適用場景
  • 需要輕量級內存數據庫的測試環境。
  • 對資源占用敏感的場景。

配置示例

# application.properties
spring.datasource.url=jdbc:hsqldb:mem:testdb
spring.datasource.driver-class-name=org.hsqldb.jdbc.JDBCDriver
spring.datasource.username=SA
spring.datasource.password=

代碼示例

// 測試類(與H2類似)
@RunWith(SpringRunner.class)
@SpringBootTest
public class HSQLDBTest {@Autowiredprivate JdbcTemplate jdbcTemplate;@Testpublic void testHSQLDB() {jdbcTemplate.update("CREATE TABLE test (id INT, name VARCHAR(255))");// 其他操作類似H2}
}

3. Derby 數據庫

特點

  • 內存模式和文件模式支持。
  • 支持多用戶訪問。
  • 由Apache維護,兼容JDBC。
    適用場景
  • 需要多用戶支持的測試環境。
  • 對JDBC兼容性要求高的場景。

配置示例

# application.properties
spring.datasource.url=jdbc:derby:memory:testdb;create=true
spring.datasource.driver-class-name=org.apache.derby.jdbc.EmbeddedDriver
spring.datasource.username=app
spring.datasource.password=app

代碼示例

// 測試類(與H2類似)
@RunWith(SpringRunner.class)
@SpringBootTest
public class DerbyTest {@Autowiredprivate JdbcTemplate jdbcTemplate;@Testpublic void testDerby() {jdbcTemplate.update("CREATE TABLE test (id INT, name VARCHAR(255))");// 其他操作類似H2}
}

二、關鍵差異對比表格

特性H2HSQLDBDerby
內存模式支持??????
文件模式支持??(持久化到文件)????
Web控制臺??(需配置)??
SQL方言兼容性??(支持MySQL/PostgreSQL/Oracle)部分支持標準SQL
性能高(內存模式最快)中等中等
社區活躍度高(廣泛使用)中等中等
適用場景測試、開發環境(需Web控制臺)輕量級測試多用戶測試或JDBC兼容性需求

三、選擇建議

  1. 優先選擇H2

    • 需要Web控制臺時首選。
    • 性能要求高且需模擬不同數據庫方言(如測試MySQL邏輯)。
  2. 選擇HSQLDB

    • 內存模式輕量級場景。
    • 對資源占用敏感時。
  3. 選擇Derby

    • 需要多用戶訪問或嚴格JDBC兼容性。
    • 項目已有Derby依賴時。

四、注意事項

  • 僅用于測試環境:內嵌數據庫不適合生產環境,數據可能丟失(內存模式)。
  • 事務處理差異:某些內嵌數據庫在事務支持上有限(如H2默認自動提交)。
  • 依賴管理:Spring Boot Starter Parent會自動引入內嵌數據庫依賴,無需額外配置。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/76241.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/76241.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/76241.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Apache Hive和Snowflake的`CREATE VIEW`語法和功能特性整理的對比表

寫一個Apache Hive中CREATE VIEW語句轉換為對應Snowflake中CREATE VIEW語句的程序&#xff0c;現在需要一個根據功能的相似性對應的Apache HiveQL和Snowflake SQL的CREATE VIEW語句的表。 以下是基于Apache Hive的CREATE VIEW語法規則構造的所有可能合法語句實例及其功能說明&…

個人博客網站從搭建到上線教程

步驟1:設計個人網站 設計個人博客網站的風格樣式,可以在各個模板網站上多瀏覽瀏覽,以便有更多設計網站風格樣式的經驗。 設計個人博客網站的內容,你希望你的網站包含哪些內容如你的個人基本信息介紹、你想分享的項目、你想分享的技術文檔等等。 步驟2:選擇開發技術棧 因…

PHP回調后門

1.系統命令執行 直接windows或liunx命令 各個程序 相應的函數 來實現 system exec shell_Exec passshru 2.執行代碼 eval assert php代碼 系統 <?php eval($_POST) <?php assert($_POST) 簡單的測試 回調后門函數call_user_func(1,2) 1是回調的函數 2是回調…

Raspberry 樹莓派 CM4模塊的底板設計注意事項

1&#xff0c; 樹莓派CM4底板設計 樹莓派CM4模塊集成了CPU&#xff0c; 存儲器&#xff0c;以太網&#xff0c; 無線模塊&#xff0c;電源等等&#xff0c; 大大降低了硬件設計的要求。對我們使用樹莓派提供了很好的便利性。 本人近期因為項目的需要設計了一款CM4的底板&#x…

Java后端開發(十八)-- 使用JAXB,將JavaBean轉換XML文本

下面是測試時的運行環境: 1.jdk8 2.Maven,可能需要需要的依賴,如下: <dependency><groupId>javax.xml.bind</groupId><artifactId>jaxb-api</artifactId><version>2.3.1</version></dependency><dependency><gr…

【一起來學kubernetes】30、k8s的java sdk怎么用

Kubernetes Java SDK 是開發者在 Java 應用中與 Kubernetes 集群交互的核心工具&#xff0c;支持資源管理、服務發現、配置操作等功能。 一、主流 Java SDK 對比與選擇 官方 client-java 庫 特點&#xff1a;由 Kubernetes 社區維護&#xff0c;API 與 Kubernetes 原生對象嚴格…

PHP開發者2025生存指南

PHP&#xff0c;這個曾經被戲稱為“世界上最好的語言”的腳本語言&#xff0c;依舊在網絡世界占據著重要的地位。然而&#xff0c;技術發展日新月異&#xff0c;面向2025年&#xff0c;PHP開發者要想保持競爭力甚至實現職業生涯的飛躍&#xff0c;需要不斷學習和提升自身技能。…

MySQL與Redis數據一致性保障方案詳解

前言 在現代分布式系統中&#xff0c;MySQL和Redis的結合使用非常普遍。MySQL作為關系型數據庫負責持久化存儲&#xff0c;而Redis則作為高性能緩存層提升系統的響應速度。然而&#xff0c;在這種架構下&#xff0c;如何保證MySQL與Redis之間的數據一致性是一個重要的挑戰。本…

MySQL響應慢是否由堵塞或死鎖引起?

目錄標題 **1. 檢查當前運行的查詢和進程****2. 查看死鎖日志****方法一&#xff1a;通過錯誤日志****方法二&#xff1a;通過InnoDB狀態** **3. 檢查鎖信息****查看表鎖****查看行鎖&#xff08;InnoDB&#xff09;** **4. 分析慢查詢****開啟慢查詢日志****分析慢查詢** **5.…

【計算機網絡】記錄一次校園網無法上網的解決方法

問題現象 環境&#xff1a;實訓室教室內時間&#xff1a;近期突然出現 &#xff08;推測是學校在施工&#xff0c;部分設備可能出現問題&#xff09;癥狀&#xff1a; 連接校園網 SWXY-WIFI 后&#xff1a; 連接速度極慢偶發無 IP 分配&#xff08;DHCP 失敗&#xff09;即使分…

JavaScript函數式編程思想

1. 相關面試題 1.1. 什么是純函數&#xff1f; 純函數是一種函數&#xff0c;其返回值僅由其輸入參數決定&#xff0c;不產生任何可觀察的副作用&#xff0c;如修改全局對象或外部狀態。 純函數具有以下特性&#xff1a; 1. 確定性&#xff1a;相同的輸入永遠得到相同的輸…

Elasticsearch安全與權限控制指南

在Elasticsearch維護中&#xff0c;安全管理是保障數據合規性和集群穩定性的關鍵。本文將詳細介紹用戶與角色管理、索引/字段級權限控制、HTTPS加密通信、審計日志與合規性檢查等核心安全實踐&#xff0c;希望可以幫助你構建更安全的Elasticsearch環境。 1 用戶與角色管理 1.1…

『VUE』快速入門配置環境使用tailwind css 記憶tailwind css常見規則 (詳細圖文注釋)

目錄 效果預覽快速入門環境配置配置 tailwind.config.js 設置文件添加 Tailwind 的基礎樣式引入樣式到項目檢查構建工具配置測試 Tailwind CSS 效果 使用插件tailwind.config.js的最終內容app.vue演示 為什么不需要記憶 Tailwind 的類名&#xff1f;1. 類名直觀2. 文檔全面3. 工…

StdioIterator

參考這種用法&#xff1a; int a[3]{1,2,3}; copy(a,a3,ostream_iterator<int>(cout," ")); 以及 ostream_iterator 類 | Microsoft Learn 中的函數簽名&#xff0c;可以編寫出 StdioIterator&#xff0c;同樣支持 copy 函數的調用。 #include <stdio.h&…

制作service列表并打印出來

制作service列表并打印出來 在Linux中&#xff0c;服務&#xff08;Service&#xff09;是指常駐在內存中的進程&#xff0c;這些進程通常監聽某個端口&#xff0c;等待其他程序的請求。服務也被稱為守護進程&#xff08;Daemon&#xff09;&#xff0c;它們提供了系統所需的各…

CKS認證 | Day3 K8s容器運行環境安全加固

一、最小特權原則&#xff08;POLP&#xff09; 1&#xff09;最小特權原則 (Principle of least privilege&#xff0c;POLP) &#xff1a; 是一種信息安全概念&#xff0c;即為用戶提供執行其工作職責所需的最 小權限等級或許可。 最小特權原則被廣泛認為是網絡安全的最佳實…

Linux wifi 驅動移植適配流程詳解

基礎內容概要 將tplink wn725n 無線網卡驅動移植到ubuntu將tplink wn725n 無線網卡驅動移植到Linux開發板&#xff08;交叉編譯&#xff09;將tplink wn725n 無線網卡驅動移植到Linux開發板&#xff0c;在開發板中編譯 為什么還要包涵交叉編譯&#xff1f; 目標設備是ARM架構…

Day14 動態規劃(3)

一.746. 使用最小花費爬樓梯 FS記憶化搜索優化: const int N 1010;class Solution { public:int mem[N];int dfs(vector<int>& cost, int x){if(mem[x]) return mem[x];int sum 0;if(x 0 || x 1) return 0;else{sum min(dfs(cost, x - 1) cost[x - 1], dfs(c…

解鎖AI潛能:模型上下文協議(MCP)的革新與應用

解鎖AI潛能:模型上下文協議(MCP)的革新與應用 在人工智能發展的當下,大語言模型(LLM)正逐步滲透到各個領域。從智能客服快速響應客戶咨詢,到智能編程助手協助開發者高效編寫代碼,LLM展現出強大的能力。然而,隨著應用的深入會面臨一個問題:模型與數據之間的連接困境。…

windows與ubuntu雙硬盤雙系統安裝及啟動(全流程成功)

&#x1f451;主頁&#xff1a;吾名招財 &#x1f453;簡介&#xff1a;工科學碩&#xff0c;研究方向機器視覺&#xff0c;愛好較廣泛… ?&#x1f4ab;簽名&#xff1a;面朝大海&#xff0c;春暖花開&#xff01; windows與ubuntu雙硬盤雙系統安裝及啟動&#xff08;全流程成…