香港云主机最佳企业级服务商!

ADSL拨号VPS包含了中国大陆(联通,移动,电信,)

中国香港,国外拨号VPS。

当前位置:云主机 > MYSQL >

电信ADSL拨号VPS
联通ADSL拨号VPS
移动ADSL拨号VPS

用于App服务端的MySQL连接池(支持高并发)


时间:2020-11-02 13:42 作者:admin


本文向大家介绍了简单的mysql/' target='_blank'>mysql连接池,用于App服务端比较合适,分享给大家供大家参考,具体内容如下

/** * 连接池类 */package com.junones.test; import java.sql.Connection;import java.sql.SQLException;import java.util.HashMap;import java.util.Map;import java.util.Map.Entry; import com.MySQL.jdbc.jdbc2.optional.MysqlDataSource; public class MySQLPool {  private static volatile MySQLPool pool;  private MysqlDataSource ds;  private Map<Connection, Boolean> map;   private String url = "jdbc:mysql://localhost:3306/test";  private String username = "root";  private String password = "root1234";  private int initPoolSize = 10;  private int maxPoolSize = 200;  private int waitTime = 100;     private MySQLPool() {    init();  }     public static MySQLPool getInstance() {    if (pool == null) {      synchronized (MySQLPool.class) {        if(pool == null) {          pool = new MySQLPool();        }      }    }    return pool;  }     private void init() {    try {      ds = new MysqlDataSource();      ds.setUrl(url);      ds.setUser(username);      ds.setPassword(password);      ds.setCacheCallableStmts(true);      ds.setConnectTimeout(1000);      ds.setLoginTimeout(2000);      ds.setUseUnicode(true);      ds.setEncoding("UTF-8");      ds.setZeroDateTimeBehavior("convertToNull");      ds.setMaxReconnects(5);      ds.setAutoReconnect(true);      map = new HashMap<Connection, Boolean>();      for (int i = 0; i < initPoolSize; i++) {        map.put(getNewConnection(), true);      }    } catch (Exception e) {      e.printStackTrace();    }  }     public Connection getNewConnection() {    try {      return ds.getConnection();    } catch (SQLException e) {      e.printStackTrace();    }    return null;  }     public synchronized Connection getConnection() {    Connection conn = null;    try {      for (Entry<Connection, Boolean> entry : map.entrySet()) {        if (entry.getValue()) {          conn = entry.getKey();          map.put(conn, false);          break;        }      }      if (conn == null) {        if (map.size() < maxPoolSize) {          conn = getNewConnection();          map.put(conn, false);        } else {          wait(waitTime);          conn = getConnection();        }      }    } catch (Exception e) {      e.printStackTrace();    }    return conn;  }     public void releaseConnection(Connection conn) {    if (conn == null) {      return;    }    try {      if(map.containsKey(conn)) {        if (conn.isClosed()) {          map.remove(conn);        } else {          if(!conn.getAutoCommit()) {            conn.setAutoCommit(true);          }          map.put(conn, true);        }      } else {        conn.close();      }    } catch (SQLException e) {      e.printStackTrace();    }  }} /** * 测试类 */package com.junones.test; import java.sql.Connection;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement; public class TestMySQLPool {  private static volatile int a;   private synchronized static void incr() {    a++;  }   public static void main(String[] args) throws InterruptedException {    int times = 10000;    long start = System.currentTimeMillis();    for (int i = 0; i < times; i++) {      new Thread(new Runnable() {         @Override        public void run() {           MySQLPool pool = MySQLPool.getInstance();          Connection conn = pool.getConnection();          Statement stmt = null;          ResultSet rs = null;          try {            stmt = conn.createStatement();            rs = stmt.executeQuery("select id, name from t_test");            while (rs.next()) {              System.out.println(rs.getInt(1) + ", "                  + rs.getString(2));            }          } catch (SQLException e) {            e.printStackTrace();          } finally {            incr();            if (rs != null) {              try {                rs.close();              } catch (SQLException e) {                e.printStackTrace();              }            }            if (stmt != null) {              try {                stmt.close();              } catch (SQLException e) {              }            }            pool.releaseConnection(conn);          }        }      }).start();    }    while (true) {      if (a == times) {        System.out.println("finished, time:"            + (System.currentTimeMillis() - start));        break;      }      Thread.sleep(100);    }  }}

测试结果:1万个并发,5秒完成。

以上就是为大家分享的MySQL连接池类,希望大家喜欢,谢谢大家的关注。

(责任编辑:admin)






帮助中心
会员注册
找回密码
新闻中心
快捷通道
域名登录面板
虚机登录面板
云主机登录面板
关于我们
关于我们
联系我们
联系方式

售前咨询:17830004266(重庆移动)

企业QQ:383546523

《中华人民共和国工业和信息化部》 编号:ICP备00012341号

Copyright © 2002 -2018 香港云主机 版权所有
声明:香港云主机品牌标志、品牌吉祥物均已注册商标,版权所有,窃用必究

云官方微信

在线客服

  • 企业QQ: 点击这里给我发消息
  • 技术支持:383546523

  • 公司总台电话:17830004266(重庆移动)
  • 售前咨询热线:17830004266(重庆移动)