Java中如何使用嵌入MySQL

這篇文件主要介紹在Java中嵌入式MySQL的使用,對於一些的應用項目,提供安裝版的Mysql,Oracle是必須的工做。可是有時候若是是一個小的工具,可安裝或者移植性比較強的小軟件。再去安裝數據庫可能就比較麻煩了。java

其實MySQL也有嵌入式的,不須要安裝,在使用的過程當中,會自動建立數據庫以及經過代碼的方式啓動或者關閉。下面提供一些代碼片斷,具體的會提供下載地址。mysql

這個是核心代碼類,這個類實現了Mysql 的啓動和中止以及數據庫的啓動狀態。git

package net.simple.mysql;

import java.io.File;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import java.util.Set;

import com.mysql.management.MysqldResource;

/**
 * 
 * @author 李巖飛
 * @email eliyanfei@126.com	
 * 2016年11月2日 下午1:44:55
 *
 */
public final class EmbedMySqlServer {
	private MysqldResource mysqlInstance;
	//配置信息
	public final Properties props;
	//端口信息
	private String port;
	/**
	 * 考慮到數據庫的性能問題,容許將數據庫放在其它磁盤
	 */
	private String embedMySqlHome;

	public EmbedMySqlServer(final Properties props) {
		this.props = props;
	}

	public EmbedMySqlServer(final Properties props, String embedMySqlHome) {
		this.embedMySqlHome = embedMySqlHome;
		this.props = props;
	}

	public final String getEmbedMySqlHome() {
		return null == embedMySqlHome ? getPlatformBaseDir() : embedMySqlHome;
	}

	/**
	* 得到當前應用主目錄
	* @return 當前應用啓動程序所在目錄.
	*/
	public static String getPlatformBaseDir() {
		return System.getProperty("user.dir");
	}

	public static boolean isBlank(final String str) {
		int strLen;
		if (str == null || (strLen = str.length()) == 0) {
			return true;
		}
		for (int i = 0; i < strLen; i++) {
			if (Character.isWhitespace(str.charAt(i)) == false) {
				return false;
			}
		}
		return true;
	}

	public void startup() {
		final File baseDir = new File(getEmbedMySqlHome(), "mysql-em");
		mysqlInstance = new MysqldResource(baseDir);
		port = props.getProperty("port");
		if (isBlank(port))
			props.put("port", port = String.valueOf((int) (Math.random() * 40000)));
		final Set<Object> keys = props.keySet();
		final Map<String, String> options = new HashMap<String, String>(keys.size());
		for (final Object key : keys) {
			final String val = props.getProperty(key.toString());
			if ("".equals(val))
				options.put(key.toString(), null);
			else
				options.put(key.toString(), val.replace("{$contextPath}", getPlatformBaseDir()));
		}
		if (!mysqlInstance.isRunning())
			mysqlInstance.start("Em_MySQL", options, false, keys.contains("defaults-file"));
	}

	public String getPort() {
		return port;
	}

	/**
	 * 判斷mysql是否正在運行
	 */
	public boolean isRunning() {
		return null == mysqlInstance ? false : mysqlInstance.isRunning();
	}

	public void shutdown() {
		if (mysqlInstance != null)
			mysqlInstance.shutdown();
	}

	public void cleanup() {
		if (mysqlInstance != null)
			mysqlInstance.cleanup();
	}
}

下面這個是啓動Demo,sql

public static void main(String[] args) {
		try {
			Properties pro = new Properties();
			//根據機器配置,設置不一樣的參數
			pro.load(MysqlTest.class.getResourceAsStream("MySql_medium.properties"));
			new EmbedMySqlServer(pro).startup();
			//能夠把數據庫放到其餘磁盤
			//new EmbedMySqlServer(pro,"f:\\").startup();
			Connection conn = getTestConnection();
			System.out.println(conn.isClosed());
			conn.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

MySql_general.properties通常機器的配置樣例數據庫

MySql_medium.properties中等機器的配置樣例api

MySql_large.properties高配機的配置樣例dom

若是須要初始化用戶名和密碼,在啓動的配置文件裏面,加入下面3句話
initialize-user=true
initialize-user.user=root
initialize-user.password=123456

具體的參數能夠根據不一樣需求進行定義,好比端口能夠自由定義。工具

須要引用的mysql兩個jar,mysql-connector-mxj-gpl-6-0-11-db-files.jar,mysql-connector-mxj-gpl-6-0-11.jar性能

代碼在Git上,地址是:https://git.oschina.net/eliyanfei/api_tools.gitthis

相關文章
相關標籤/搜索