当前位置: 首页 > news >正文

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 {
    @Autowired
    private JdbcTemplate jdbcTemplate;

    @Test
    public 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 {
    @Autowired
    private JdbcTemplate jdbcTemplate;

    @Test
    public 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 {
    @Autowired
    private JdbcTemplate jdbcTemplate;

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

相关文章:

  • PyTorch量化进阶教程:第一章 PyTorch 基础
  • 如何分辨三极管的三个极
  • leetcode01背包问题(C++)
  • Splunk PDF 格式要求
  • (Kotlin)Android 高效底部导航方案:基于预定义 Menu 和 ViewPager2 的 Fragment 动态绑定实现
  • 【微服务架构】SpringCloud Alibaba(三):负载均衡 LoadBalance
  • 算法练习(队列)
  • 框架修改思路
  • Elasticsearch安全与权限控制指南
  • CoAP Shell 笔记
  • cocos 图片上传与下载
  • C#:字符串插值(String Interpolation)
  • AI绘画 | Stable Diffusion 图片背景完美替换
  • 动态规划学习——背包问题
  • 如何模拟用户行为避免被检测到是爬虫?
  • 新手如何成为一名顶尖黑客?只需这十二个步骤轻松入门!
  • Apache Hive中数据类型转换为对应Snowflake中数据类型的方法
  • 算法中子数组问题详解,多种解法,包含对应题目!
  • Windows上使用bash脚本
  • RFID技术在工业生产线自动化中的应用方案
  • 前端只是做网站吗/全网营销软件
  • 嘉兴网站制作/杭州seo薪资水平
  • 目前做系统比较好的网站/代做百度关键词排名
  • 做模型的网站有哪些/chatgpt网址
  • 厦门网页制作厦门小程序app/seo管理工具
  • 做网站的找哪个/公司网站首页设计