H2 不香么? 为什么使用MariaDB4J ?

谈到在测试中使用内存数据库,估计首先想到的就是H2了。使用时也非常方便,只要在下述SpringBoot的配置文件里修改一下datasource即可。application.propertiesspring.datasource.url=jdbc:h2:mem:testdb

spring.datasource.driverClassName=org.h2.Driver

spring.datasource.username=sa

spring.datasource.password=

spring.jpa.database-platform=org.hibernate.dialect.H2Dialect

然后一个名字为testdb的数据库就就绪了。如果要导入数据库表和基础数据的话,也只要在src/test/resouces下面提供如下两个文件

schema.sql – 创建schema和表

data.sql – 导入基础数据

看上去是不是很方便呢?

不过随着在项目中使用的深入,就发现了一些问题语法上兼容性(如注释)以及产品功能上的问题(如多层临时表),具体可以关注笔者之前整理的一个list。如果选择继续使用H2,就需要团队为H2去维护另外一套H2专用的schema。因此,使用MySQL的团队需要额外寻找一个H2的替代品,一个更兼容MySQL的内存数据库。

经过一番搜索,MariaDB4J 终于走进了团队的视野。https://github.com/vorburger/MariaDB4j这个开源项目的目标就是让用户use MariaDB (MySQL(R)) from Java without ANY installation / external dependencies

在SpringBoot项目中使用

来看看如何使用它。以下是一个测试专用的App基类package com.testlink4j;

import org.mybatis.spring.annotation.MapperScan;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.context.annotation.Configuration;

import ch.vorburger.mariadb4j.springframework.MariaDB4jSpringService;

@Configuration

@SpringBootApplication

// mapper 接口类扫描包配置

@MapperScan("com.testlink4j.dao")

public class TestApplication{//extends Application {

public static void main(String[] args){

SpringApplication.run(TestApplication.class,args);

}

private final MariaDB4jSpringService mariaDB4JSpringService;

@Autowired

public TestApplication (MariaDB4jSpringService mariaDB4JSpringService){

this.mariaDB4JSpringService= mariaDB4JSpringService;

}

}

通过给Spring应用提供一个测试用的TestApplication,并提供一个带有MariaDB4jSpringService 作为入参,就可以实现数据库的启动了。. ____ _ __ _ _

/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \

( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \

\\/ ___)| |_)| | | | | || (_| | ) ) ) )

' |____| .__|_| |_|_| |_\__, | / / / /

=========|_|==============|___/=/_/_/_/

:: Spring Boot :: (v2.2.5.RELEASE)

INFO 7264 --- [ main] c.t.s.impl.TestProjectServiceImplTest : No active profile set, falling back to default profiles: default

.s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 35ms. Found 0 JPA repository interfaces.

INFO 7264 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 0 (http)

INFO 7264 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]

INFO 7264 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.31]

INFO 7264 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext

INFO 7264 --- [ main] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 7118 ms

INFO 7264 --- [ main] ch.vorburger.mariadb4j.DB : Installation complete.

INFO 7264 --- [ main] ch.vorburger.mariadb4j.DB : Starting up the database...

INFO 7264 --- [ main] ch.vorburger.mariadb4j.DB : Database startup complete.

INFO 7264 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...

INFO 7264 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.

INFO 7264 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 51602 (http) with context path ''

INFO 7264 --- [ main] c.t.s.impl.TestProjectServiceImplTest : Started TestProjectServiceImplTest in 21.636 seconds (JVM running for 24.737)

INFO 7264 --- [ main] c.t.s.impl.TestProjectServiceImplTest :

我们可以看到,在Spring容器启动初期,会安装、启动一个mariadb4j并装载schema和data。

SpringBoot中的配置

在application-test.properties文件中使用如下配置,#Location of db files. delete this directory if you need to recreate from scratch

mariaDB4j.dataDir=./data/local

#Default is 3306, so using 3307 just in case it is already running on this machine

mariaDB4j.port=3307

app.mariaDB4j.databaseName=testdb

spring.datasource.url=jdbc:mariadb://localhost:3307/

spring.datasource.username=root

spring.datasource.password=

spring.datasource.driver-class-name=org.mariadb.jdbc.Driver

spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect

mysql的内存数据库,MySQL内存数据库的新选择-MariaDB4J相关推荐

  1. 6.(Mysql数据管理相关)连接MYSQL,修改密码,增加新用户,数据库相关命令,表操作相关命令,数据相关命令,数据库sql导入和导出,备份数据库,查看不到mysql数据库的解决办法

     mysql安装完之后,登陆后发现只有两个数据库:mysql>show databases; +--------------------+ | Database           | +- ...

  2. mysql 自增列坏处_MySQL--更新自增列的潜在风险

    ##=====================================================================## 测试环境: MySQL版本:MySQL 5.7.19 ...

  3. 两千字揭密 MySQL 8.0.19 三大索引新功能:隐藏索引,降序索引,函数索引

    导读:本文详细介绍 MySQL 8.0.19 三大索引新功能,隐藏索引,降序索引,函数索引,结合其他同仁的技术应用案例,进一步进行验证改编,最后总结心得,希望对大家有帮助. MySQL 8.0 版本带 ...

  4. MySQL 8.0.12 有什么新内容?

    关注"数据和云"获得更多内容 引言 时隔三个月,MySQL 8.0.12 有什么新内容? 今年4月份,MySQL突然直接从8.0.5跳过多个版本号到8.0.11,直接宣布8.0.1 ...

  5. groupby索引有效吗_两千字揭密 MySQL 8.0.19 三大索引新功能

    原文链接:https://www.modb.pro/db/22619 导读:本文详细介绍 MySQL 8.0.19 三大索引新功能,隐藏索引,降序索引,函数索引,结合其他同仁的技术应用案例,进一步进行 ...

  6. mac mysql root不能登陆_Mac下新安装的MySQL无法登陆root用户解决方法

    一 设置MySQL命令行搜索路径 0.苹果->系统偏好设置->最下边点mysql 在弹出页面中 启动mysql服务 1.打开终端,输入: sudo vi ~/.bash_profile 如 ...

  7. MySQL 8 中值得关注的新特性和改进

    1. 性能:读/写工作负载.IO 密集型工作负载.以及高竞争("hot spot"热点竞争问题)工作负载. 2. NoSQL:提供 NoSQL 存储功能,目前在 8.0 版本中更大 ...

  8. 使用MySQL Workbench建立数据库,建立新的表,向表中添加数据

    初学数据库,记录一下所学的知识.我用的MySQL数据库,使用MySQL Workbench管理.下面简单介绍一下如何使用MySQL Workbench建立数据库,建立新的表,为表添加数据. 点击上图中 ...

  9. memcached 穿透mysql_memcached 和 mysql 结合使用的两种实现选择?

    memcached 和 mysql 结合使用的两种实现选择? 这是我在知乎上抛出的一个问题"我们的应用已经决定采mysql+memcached 的方式,针对的数据库版本是 mysql 5.1 ...

最新文章

  1. ORB-SLAM3 论文笔记
  2. 超过3w的数据怎么导出来_PDF图纸怎么算量?
  3. 【深度学习笔记】使用knn实现特征向量分类
  4. 数据集与JSON对象互相转换
  5. 单片机烧录软件编写_单片机技术系列之一:单片机概述
  6. 新冠患者样本单细胞测序文献汇总
  7. 创新方法(TRIZ)理论及应用
  8. 中标麒麟(linux)下Qt调用python数据转换
  9. app自动化之混合应用的测试(h5,小程序)
  10. html 下拉怎么固定表头,HTML Table 固定表头简单实现
  11. 怎么用js代码画一棵树,附带下载链接
  12. 我和腾讯不得不说的故事
  13. elasticsearch 使用
  14. java绘制菱形平行四边形_Java实现金字塔形菱形平行四边形
  15. 服务器系统照片备份,利用云服务器备份照片
  16. 跟着小马哥学习Spring(1)
  17. 【图像超分辨率重建】——SwinIR论文精读笔记
  18. 树莓派串口简单测试语音识别模块
  19. vue 中 highcharts 的简单使用
  20. 中国果汁饮料行业营销状况与竞争趋势预测报告(2022-2027年)

热门文章

  1. C/Cpp / 虚函数是否可以用 inline 修饰
  2. 密码学 / 哈希算法
  3. mysql主主同步配置_MySQL 主主同步配置步骤
  4. 低电压瞬态抑制二极管,有哪些常用的型号?
  5. 大工19春《计算机原理》在线作业2,大工19春《计算机原理》在线作业2.pdf
  6. fastdfs 测试客户端_分布式文件服务 FastDFS (第一篇)
  7. Csharp: Winform 顏色選擇器 Color convert RGB and RGB convert Color
  8. linux 清空catalina.out日志 不需要重启tomcat(五种方法)【转】
  9. git clone failed. Could not read from remote repository
  10. 混编ObjectiveC++