背景

H2 数据库是一个开源的嵌入型内存数据库,采用纯Java语言实现;

程序非常小巧轻便,整个完整的Jar包也只有1.5M左右,很容易集成到项目中。

官网地址

http://www.h2database.com/html/main.html

在数据存储的场景中,为什么会使用内存数据库?常见的出发点可能有:

  1. 计算资源限制,如嵌入式计算环境中,由于CPU、内存、Disk等限制,要求采用小巧的数据库存储方案;
  2. 项目预研,在项目立项之前可能无法立即采购昂贵的数据库软件,此时往往可以退而选择临时解决方案,利用JDBC协议的通用性在后期完成切换;
  3. 自动化测试,在自动化环境中可能需要大量模拟接口,包括数据存储接口,此时内存数据库是不二之选。

单元测试的场景也属于自动化测试,下面主要阐述H2 数据库在项目单元测试中的典型应用。

单元测试的痛点

一个 Junit单元测试的流程包括

  1. 初始化数据
  2. 执行测试
  3. 销毁数据

在真实的测试代码开发中,有几类问题会造成困扰:

  1. 数据库环境的搭建

    搭建一套完整的数据库往往比较耗时,然而一旦将数据库配置加入测试范围,就必须长期维护其稳定性;

    这同时也会带来代码库同步的困扰。

  2. 保证数据库的"干净"

    大多数情况下,每个测试用例在启动前(初始化数据)都期望数据库是"干净"的状态;然而使用真实的数据库却很难保证这点,原因是:

    • 多个应用可能会共享一个物理数据库;
    • 测试用例在销毁数据时很难保证完全清除,可能一次意外的调试也会产生垃圾数据;

H2内存数据库很好的解决了上述问题,本身作为嵌入式数据库并不需要额外的看护成本;在程序退出时,所有数据都能保证完全清除。

如何使用

maven 依赖

<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.190</version>
<scope>test</scope>
</dependency>

在springboot 使用H2数据库非常方便:

application.properties

# 数据源连接
spring.datasource.url=jdbc:h2:mem:test
spring.datasource.driver-class-name=org.hsqldb.jdbcDriver
spring.datasource.username=root
spring.datasource.password= # DDL脚本
spring.datasource.schema=classpath:script/test-schema.sql
# DML脚本
spring.datasource.data=classpath:script/test-data.sql

最新文章

  1. Hadoop开发第4期---分布式安装
  2. Java——private default protected public访问控制权限
  3. 使用 Fiddler2 进行接口测试的方法
  4. 【GOF23设计模式】原型模式
  5. 部署在IIS服务器的asp.net 网站,禁止访问指定类型文件
  6. 能在你离开时照顾你的宠物的3D打印机器人
  7. ps批量修改图片
  8. SharePoint 2010 产品六大功能模块
  9. CSS sprites减少HTTP请求
  10. windowsxp系统下SVN添加新用户
  11. 网络协议 2 - IP 是怎么来,又是怎么没的?
  12. 《程序员的自我修养》读书笔记——系统调用、API
  13. webService的介绍与简单使用
  14. Spring Boot + Spring Cloud 构建微服务系统(十):配置中心(Spring Cloud Bus)
  15. nodejs初识
  16. javascript中IE浏览器不支持NEW DATE()带参数的解决方法
  17. logstash实战input插件syslog
  18. form表单元素中disabled的元素的值不会提交到服务器
  19. (原创)Stanford Machine Learning (by Andrew NG) --- (week 9) Anomaly Detection&amp;Recommender Systems
  20. MYSQL数据库索引类型都有哪些?

热门文章

  1. Java中的集合框架(下)
  2. Flask框架
  3. 一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](一)
  4. Angular17 Angular自定义指令
  5. 51Nod 1289 大鱼吃小鱼(模拟,经典好题)
  6. POJ 3624 Charm Bracelet(01背包裸题)
  7. ES5.0集群搭建
  8. c++(八皇后)
  9. 一对多(多对一)关系中的inverse和cascade属性
  10. dedecms织梦首页如何调用文章列表?