您现在的位置是:亿华云 > 域名
免安装,还原生产环境,运行中切换版本,这不是我认识的MySQL
亿华云2025-10-08 23:31:19【域名】1人已围观
简介MySQL,用了好多年了吧,在你印象里是不是一直都是四平八稳,做为一个基础组件,也不期待啥了。如果说想线下调度,集成测试,想用一个内存数据库,你可能会说那H2, Derby吧,不都可以嘛。但差别是你在
MySQL,免安用了好多年了吧,装还在你印象里是原生不是一直都是四平八稳,做为一个基础组件,产环也不期待啥了。境运
如果说想线下调度,行中集成测试,切换想用一个内存数据库,版本你可能会说那H2,免安 Derby吧,不都可以嘛。装还
但差别是原生你在自己线下时跑了多少不说,但不同的产环数据库,不同的境运特性,可能有些地方无法真正还原线上。行中为什么不安装一个?切换费事,哈哈。
今天咱们介绍的这位,可以理解为嵌入MySQL,免安装。不同的测试时还可以切换不同的版本,企商汇Cool。
使用起来也不费劲,加个 Maven 依赖就行,分分钟的事儿。
就是它:
<dependency> <groupId>com.wix</groupId> <artifactId>wix-embedded-mysql</artifactId> <version>x.y.z</version> <scope>test</scope> </dependency>代码也简单,直接定义你需要的版本,数据库信息,把要初始化的SQL 给它,走起。
MysqldConfig config = aMysqldConfig(v5_6_23) //这里是版本 .withCharset(UTF8) .withPort(2215) .withUser("user1", "pwd2") .withTimeZone("Europe/Vilnius") .withTimeout(2, TimeUnit.MINUTES) .withServerVariable("max_connect_errors", 666) .build(); EmbeddedMysql mysqld = anEmbeddedMysql(config) .addSchema("aschema", ScriptResolver.classPathScript("db/001_init.sql")) .start(); //do work mysqld.stop(); //optional, as there is a shutdown hook这有啥优势:
测试可以跑在和生产环境基本一致的环境,同样的版本,同样的编码和配置,database/schema/user settings 等等 比安装一个更容易,想切换版本,改配置也更轻松; 本地每个项目可以使用不同的版本,不同的配置,啥都不用担心; 对于MySQL的多个版本支持 - 5.5, 5.6, 5.7, 8.0; 多种平台和环境都支持。服务器租用原理
这背后是怎么实现的呢?
咱们是「刨根究底」公众号,一起来看看。
上面代码配置之后的 start ,到底 start 了啥?
咱们看下面这几小段代码:
protected EmbeddedMysql( final MysqldConfig mysqldConfig, final DownloadConfig downloadConfig) { this.config = mysqldConfig; IRuntimeConfig runtimeConfig = new RuntimeConfigBuilder().defaults(mysqldConfig, downloadConfig).build(); MysqldStarter mysqldStarter = new MysqldStarter(runtimeConfig); localRepository.lock(); try { this.executable = mysqldStarter.prepare(mysqldConfig); } finally { localRepository.unlock(); } try { executable.start(); getClient(SCHEMA, mysqldConfig.getCharset()).executeCommands( format("CREATE USER %s@%% IDENTIFIED BY %s;", mysqldConfig.getUsername(), mysqldConfig.getPassword())); } catch (IOException e) { throw new RuntimeException(e); } } protected MysqldProcess start( final Distribution distribution, final MysqldConfig config, final IRuntimeConfig runtime) throws IOException { logger.info("Preparing mysqld for startup"); Setup.apply(config, executable, runtime); logger.info("Starting MysqldProcess"); return new MysqldProcess(distribution, config, runtime, this); }其实这背后依赖了一个叫embed.process的开源项目,
它又操作了什么呢?从名字你也猜到了,它是直接操作进程的,实际在运行时,会下载一个MySQL,然后通过脚本启停。
初次启动的时候,会直接下载
有了这些,在测试的时候就可以和生产环境一样,启动时加载初始化SQL脚本,开始你的工作了。
github地址:https://github.com/wix/wix-embedded-mysql
本文转载自微信公众号「Tomcat那些事儿」,可以通过以下二维码关注。转载本文请联系Tomcat那些事儿公众号。
很赞哦!(4)
上一篇: CNAME:对应解析的记录值为域名地址
下一篇: 四、长串数字域名
相关文章
- .com域名是国际最广泛流行的通用域名,目前全球注册量第一的域名,公司企业注册域名的首选。国际化公司通常会注册该类域名。
- 服务器性能优化之网络性能优化
- 戴尔科技PowerFlex Manager 简化基础架构 IT 操作,提高业务的敏捷性
- 物联网在建筑中到底扮演什么角色
- 并非一个好米任何人都会给你一个好的价格。那你该如何用以有的好米卖出最理想的价格呢?
- 微服务面试必问的Dubbo,这么详细还怕自己找不到工作?
- 戴尔科技 VMware Tanzu 加快基础设施现代化进程满足您的业务需求
- 面试官:给我讲讲Nginx如何实现四层负载均衡?
- 2016年1月1日:注册价格将降至每年7欧元。
- 芯片战争50年,Intel为什么干不掉AMD?