Java中嵌入式MySQL的使用方法

 更新时间:2016年11月06日 17:03:56   作者:李岩飞  
这篇文章主要为大家详细介绍了Java中嵌入式MySQL的使用方法,Java中如何使用嵌入MySQL,感兴趣的小伙伴们可以参考一下

这篇文件主要介绍在Java中嵌入式MySQL的使用,对于一些的应用项目,提供安装版的Mysql,Oracle是必须的工作。但是有时候如果是一个小的工具,可安装或者移植性比较强的小软件。再去安装数据库可能就比较麻烦了。

其实MySQL也有嵌入式的,不需要安装,在使用的过程中,会自动创建数据库以及通过代码的方式启动或者关闭。下面提供一些代码片段,具体的会提供下载地址。

这个是核心代码类,这个类实现了Mysql 的启动和停止以及数据库的启动状态。

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,

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中等机器的配置样例

MySql_large.properties高配机的配置样例

具体的参数可以根据不同需求进行定义,比如端口可以自由定义。

需要引用的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.git

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • MyBatis-Plus实现公共字段自动填充功能详解

    MyBatis-Plus实现公共字段自动填充功能详解

    在开发中经常遇到多个实体类有共同的属性字段,这些字段属于公共字段,也就是很多表中都有这些字段,能不能对于这些公共字段在某个地方统一处理,来简化开发呢?MyBatis-Plus就提供了这一功能,本文就来为大家详细讲讲
    2022-08-08
  • Java实现重定向过程中添加请求头信息

    Java实现重定向过程中添加请求头信息

    在Java中,我们经常需要使用网络请求来与服务器进行通信,在进行网络请求时,有时我们需要在重定向过程中添加请求头信息,本文将介绍如何使用Java在重定向过程中添加请求头,并提供相应的代码示例,
    2023-10-10
  • 浅析mybatis和spring整合的实现过程

    浅析mybatis和spring整合的实现过程

    据官方的说法,在Mybatis3问世之前,Spring3的开发工作就已经完成了,所以Spring3中还是没有对Mybatis3的支持。因此由Mybatis社区自己开发了一个Mybatis-Spring用来满足Mybatis用户整合Spring的需求,下面通过Mybatis-Spring来整合Mybatis跟Spring的用法做介绍
    2015-10-10
  • 一文探究ArrayBlockQueue函数及应用场景

    一文探究ArrayBlockQueue函数及应用场景

    这篇文章主要为大家介绍了一文探究ArrayBlockQueue函数及应用场景,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • springboot运行到dokcer中 dockerfile的场景分析

    springboot运行到dokcer中 dockerfile的场景分析

    这篇文章主要介绍了springboot运行到dokcer中 dockerfile,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-03-03
  • mybatis-plus支持null字段全量更新的两种方法

    mybatis-plus支持null字段全量更新的两种方法

    本文主要介绍了mybatis-plus支持null字段全量更新的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • Java正则表达式处理特殊字符转义的方法

    Java正则表达式处理特殊字符转义的方法

    由于正则表达式定了一些特殊字符,而有时候需要对这些特殊字符进行匹配的话就需要进行转义了,下面这篇文章主要给大家介绍了Java正则表达式处理特殊字符转义的方法,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-01-01
  • java应用cpu占用过高问题分析及解决方法

    java应用cpu占用过高问题分析及解决方法

    这篇文章主要介绍了java应用cpu占用过高问题分析及解决方法,具有一定参考价值,需要的朋友可以参考下。
    2017-09-09
  • Spring实现在非controller中获取request对象

    Spring实现在非controller中获取request对象

    这篇文章主要介绍了Spring实现在非controller中获取request对象方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • mybatis foreach批量插入数据:Oracle与MySQL区别介绍

    mybatis foreach批量插入数据:Oracle与MySQL区别介绍

    这篇文章主要介绍了,需要的朋友可以参考下
    2018-01-01

最新评论