MariaDB / H2

MariaDB / H2总览对比

项目 H2 MariaDB
类型 嵌入式/内存关系数据库,Java编写 开源关系型数据库,MySQL分支
运行模式 内存模式、文件模式、服务模式 独立服务进程
适用场景 单元测试、开发环境、小工具演示、内嵌程序 生产业务库,高并发、大数据量
驱动类 org.h2.Driver org.mariadb.jdbc.Driver
JDBC URL 内存:jdbc:h2:mem:test;DB_CLOSE_DELAY=-1 文件:jdbc:h2:file:./data/db jdbc:mariadb://127.0.0.1:3306/dbname
兼容性 SQL接近MySQL,部分函数差异 高度兼容MySQL语法
优势 无需安装,随Java程序启动关闭;支持web控制台;速度快;零部署 稳定、事务、索引优化、主从复制、集群、大量运维工具
短板 不适合生产;并发能力弱;断电内存模式数据丢失;文件模式数据量有限 需要独立部署维护,占用资源

1. H2 Database

纯Java实现,最常用做单元测试内存数据库,SpringBoot内置支持。

三种运行模式

  1. 内存模式 mem 数据完全在内存,程序关闭数据丢失。

    spring.datasource.url=jdbc:h2:mem:demo;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE

DB_CLOSE_DELAY=-1:最后一个连接关闭不销毁数据库,单元测试必备。

  1. 文件模式 file 数据持久化到磁盘文件,程序重启数据保留。

    jdbc:h2:file:./h2data/mydb

  2. 服务模式 tcp H2作为独立服务,可以多进程远程连接,很少使用。

SpringBoot集成H2

pom依赖

复制代码
<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <scope>runtime</scope>
</dependency>

application.yml

复制代码
spring:
  datasource:
    driver-class-name: org.h2.Driver
    url: jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1
    username: sa
    password:
  h2:
    console:
      enabled: true   # 开启web控制台 http://localhost:8080/h2-console
      path: /h2-console

H2注意坑点

  1. 内存模式:应用重启数据全部清空;
  2. 大小写、自增、部分mysql函数不兼容(find_in_setgroup_concat等行为不一样);
  3. 并发性能差,禁止生产使用
  4. web控制台不要暴露到公网;
  5. MyBatis‑Plus、JPA单元测试非常适合H2内存库。

典型用法:开发测试环境用H2,正式环境切换MariaDB/MySQL。


2. MariaDB

MySQL的开源分支,由原MySQL开发团队维护,绝大多数MySQL语法、驱动、配置几乎通用

Maven依赖

复制代码
<dependency>
    <groupId>org.mariadb.jdbc</groupId>
    <artifactId>mariadb‑java‑client</artifactId>
</dependency>

不要继续使用旧的mysql‑connector‑java,新项目优先mariadb驱动,也可以连接MySQL。

SpringBoot配置

复制代码
spring:
  datasource:
    driver-class-name: org.mariadb.jdbc.Driver
    url: jdbc:mariadb://127.0.0.1:3306/demo?useUnicode=true&characterEncoding=utf8mb4&useSSL=false&serverTimezone=Asia/Shanghai
    username: root
    password: 123456

关键特性

  1. 字符集优先 utf8mb4,支持完整emoji;mysql的utf8只是3字节;
  2. 支持主从复制、Galera集群;
  3. 存储引擎 InnoDB(默认,支持事务ACID,行锁);MyISAM不支持事务;
  4. 支持视图、存储过程、触发器、分区表;
  5. 向下兼容MySQL,迁移成本极低。

MariaDB vs MySQL小差异

  • 部分系统函数、系统表名字略有区别;
  • MariaDB有更多内置引擎;
  • 授权语法、索引语法大体一致;
  • 驱动包完全不一样,驱动类名不同。

生产最佳实践

  1. 必用InnoDB;
  2. 主键建议自增bigint;
  3. 避免大事务;
  4. 合理建立索引,避免回表;
  5. 开启慢查询日志优化SQL;
  6. 连接池配置(HikariCP):最大连接数不要设置过大。

3. H2 ↔ MariaDB 切换开发模式

很多项目配置两套profile:

  • dev:profile 使用H2内存库,不需要本地装数据库,跑单元测试、本地快速开发;
  • prod:profile 使用MariaDB生产数据库。

⚠️注意:SQL脚本要尽量兼容两者,否则切换会报错。H2对MySQL方言支持有限。

常见踩坑对比

场景 H2 MariaDB
自增主键 AUTO_INCREMENT 支持,但行为略有差异 AUTO_INCREMENT
分页 LIMIT offset,size 支持 LIMIT offset,size
函数 GROUP_CONCAT部分版本行为不同 完整支持GROUP_CONCAT
事务 支持,但并发弱 InnoDB完整事务、MVCC
DDL 部分语法不支持 完整DDL

4. HikariCP连接池搭配(SpringBoot默认)

不管H2还是MariaDB底层都是HikariCP。

复制代码
spring:
  datasource:
    hikari:
      maximum-pool-size: 10
      minimum-idle: 5
      idle-timeout: 300000
      connection-timeout: 30000

如果你需要,我可以补充:

  1. MyBatis‑Plus下H2+MariaDB多profile完整yml示例;
  2. H2兼容MySQL模式配置;
  3. MariaDB常用调优参数(my.cnf);
  4. H2单元测试标准模板。
相关推荐
zone_z1 小时前
07 · 等待事件与 OWI 方法:从 OSW 到 BUG 的完整破案实录
linux·数据库·oracle·ffmpeg·bug·troubleshooting
A.说学逗唱的Coke1 小时前
【数据库专题】ClickHouse 深度实战:从列式存储原理到 PB 级海量日志与可观测性分析
数据库·clickhouse·硬件架构
佳&弥1 小时前
数据库提权
服务器·数据库·安全·web安全·网络安全
智购科技自动售货机工厂1 小时前
2026自动售货机电机驱动芯片选型:从L298N到DRV8870的工程实践~YH
大数据·开发语言·数据库·人工智能·单片机·嵌入式硬件·scikit-learn
国科安芯1 小时前
ASL3159S:把精密信号的“破音“挡在切换之外的 0.9Ω 开关
服务器·网络·数据库·架构·状态模式·抗辐射加固
克里斯蒂亚诺更新2 小时前
win下如何将redis自启动
数据库·redis·缓存
青禾8372 小时前
MySQL 数据库完全指南:DDL、DML、DCL 与用户权限管理
数据库·oracle
tachibana22 小时前
大语言模型基础
数据库·人工智能·语言模型·自然语言处理·大模型·llm
小王C语言2 小时前
MySQL 事务:事务自动提交、查看/修改事务隔离级别、读未提交(RU)、读提交(RC)、可重复读(RR)、串行化
数据库·mysql