以下是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}
}
二、關鍵差異對比表格
特性 | H2 | HSQLDB | Derby |
---|---|---|---|
內存模式支持 | ?? | ?? | ?? |
文件模式支持 | ??(持久化到文件) | ?? | ?? |
Web控制臺 | ??(需配置) | ? | ? |
SQL方言兼容性 | ??(支持MySQL/PostgreSQL/Oracle) | 部分支持 | 標準SQL |
性能 | 高(內存模式最快) | 中等 | 中等 |
社區活躍度 | 高(廣泛使用) | 中等 | 中等 |
適用場景 | 測試、開發環境(需Web控制臺) | 輕量級測試 | 多用戶測試或JDBC兼容性需求 |
三、選擇建議
-
優先選擇H2:
- 需要Web控制臺時首選。
- 性能要求高且需模擬不同數據庫方言(如測試MySQL邏輯)。
-
選擇HSQLDB:
- 內存模式輕量級場景。
- 對資源占用敏感時。
-
選擇Derby:
- 需要多用戶訪問或嚴格JDBC兼容性。
- 項目已有Derby依賴時。
四、注意事項
- 僅用于測試環境:內嵌數據庫不適合生產環境,數據可能丟失(內存模式)。
- 事務處理差異:某些內嵌數據庫在事務支持上有限(如H2默認自動提交)。
- 依賴管理:Spring Boot Starter Parent會自動引入內嵌數據庫依賴,無需額外配置。