以下是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会自动引入内嵌数据库依赖,无需额外配置。