中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

免安裝原生產環境的MySQL是什么

發布時間:2021-10-22 16:33:07 來源:億速云 閱讀:167 作者:iii 欄目:數據庫

這篇文章主要介紹“免安裝原生產環境的MySQL是什么”,在日常操作中,相信很多人在免安裝原生產環境的MySQL是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”免安裝原生產環境的MySQL是什么”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

就是它:

<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是什么

public AbstractProcess(Distribution distribution, T config, IRuntimeConfig runtimeConfig, E executable)       throws IOException {     this.config = config;     this.runtimeConfig = runtimeConfig;     this.executable = executable;     this.distribution = distribution;     // pid file needs to be set before ProcessBuilder is called     this.pidFile = pidFile(this.executable.getFile().executable());      ProcessOutput outputConfig = runtimeConfig.getProcessOutput();      // Refactor me - to much things done in this try/catch     String nextCall="";     try {        nextCall="onBeforeProcess()";        onBeforeProcess(runtimeConfig);        nextCall="newProcessBuilder()";        ProcessBuilder processBuilder = ProcessControl.newProcessBuilder(           runtimeConfig.getCommandLinePostProcessor().process(distribution,               getCommandLine(distribution, config, this.executable.getFile())),           getEnvironment(distribution, config, this.executable.getFile()), true);         nextCall="onBeforeProcessStart()";        onBeforeProcessStart(processBuilder, config, runtimeConfig);        nextCall="start()";        process = ProcessControl.start(config.supportConfig(), processBuilder);        nextCall="writePidFile()";        if (process.getPid() != null) {         writePidFile(pidFile, process.getPid());       }        nextCall="addShutdownHook()";        if (runtimeConfig.isDaemonProcess() && !executable.isRegisteredJobKiller()) {         ProcessControl.addShutdownHook(new JobKiller());         registeredJobKiller = true;       }        nextCall="onAfterProcessStart()";       onAfterProcessStart(process, runtimeConfig);     } catch (IOException iox) {       stop();       throw iox;     }   }

它又操作了什么呢?從名字你也猜到了,它是直接操作進程的,實際在運行時,會下載一個MySQL,然后通過腳本啟停。

免安裝原生產環境的MySQL是什么

初次啟動的時候,會直接下載

免安裝原生產環境的MySQL是什么

有了這些,在測試的時候就可以和生產環境一樣,啟動時加載初始化SQL腳本,開始你的工作了。

github地址:https://github.com/wix/wix-embedded-mysql

到此,關于“免安裝原生產環境的MySQL是什么”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

志丹县| 神池县| 林甸县| 宁陵县| 南充市| 合川市| 三亚市| 壤塘县| 阜宁县| 石河子市| 潼南县| 集贤县| 和田县| 保靖县| 正镶白旗| 桂平市| 宜君县| 满洲里市| 梅州市| 山丹县| 同德县| 庄河市| 通榆县| 许昌县| 潜山县| 东阿县| 宜都市| 汉寿县| 上高县| 富宁县| 南华县| 商水县| 柏乡县| 云龙县| 永春县| 沂源县| 乐至县| 汝城县| 肥西县| 玉田县| 贵阳市|