自定义Mysql连接池

时间:2022-05-02 06:24:29

目录:

一、需求

二、传统链接

三、自定义连接池

四、代码展现

五、结果展现

———————————————————————————————————

一、需求

自定义Mysql连接池,让多个Mysql的连接放在一个池内,每次用完就放回池内,避免过多连接Mysql。

二、传统链接

(如下为示意图)
自定义Mysql连接池

三、自定义连接池

(示意图)
自定义Mysql连接池

四、代码展现

package com.xiaoyu.cn;

import java.sql.Connection;
import java.sql.DriverManager;
import java.util.LinkedList;

/***
*
* @author yuhui
*
* @data 2017年6月2日上午10:35:49
*/


/*
* * MyPool 类是一个数据库连接池类:
* 1、可以保存若干连接 --------------- 使用集合存储
* 2、提供一个方法,获取相关连接 ------- 将集合的连接移出给调用者
* 3、使用完连接,提供一个方法,再存回该连接池 ----- 就是将连接存回集合
*/

public class DefinedPool {

// 驱动程序名
static String driver = "com.mysql.jdbc.Driver";

// URL指向要访问的数据库名scutcs
static String url = "jdbc:mysql://tagtic-master:3306/yuhui";

// MySQL配置时的用户名
static String user = "root";

// MySQL配置时的密码
static String password = "tagtic-master";

// Mysql连接池个数
public static int poolsize = 5;

// 第一步:创建一个集合,因为这个集合最长用到的是增删,而不是查询,所以优先选择LinkedList,池中存储的是数据库连接对象,所以泛型为connection
public static LinkedList<Connection> pool = new LinkedList<Connection>();

// 第二步:有了获取connection对象的方法,我们就可以先获取几个数据库连接加入到连接池中,我们先加4个进去 ,程序一起动就加载5个连接池,到池内。
static {
for(int i=0 ; i<poolsize; i++ ){
pool.add(getCon());
}
}

// 第三步:有了池子就要向池子里加对象,那么就要先写一个获取数据库连接对象的方法
public static Connection getCon() {
// 第四步:因为下一步获取数据库连接对象的时候,需要处理异常,为了防止异常时导致con没有赋值无法使用,提前将con定义在try/catch外
Connection con = null;
try {
Class.forName(driver);
con = DriverManager.getConnection(url, user, password);
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException();
}
return con;
}

// 第五步:从连接池中获取一个连接,因为拿出来后,没返回前,这个连接会被短暂占用,所以需要调用remove方法.
public static Connection getConByPool(){
// 第六步,此时需要判断,如果池中有,就从池中拿,如果池中没有,那么就创建一个.
if (!pool.isEmpty()) {
return pool.remove();
} else {
return getCon();
}
}

// 第七步: 连接用完后,需要将连接放回来.
public static void close(Connection con) {
pool.add(con);
}

public static void main(String[] args){

System.out.println("初始化有:"+pool.size()+"个连接池");

Connection conByPool0 = getConByPool();

System.out.println("拿出一个有:"+pool.size()+"个连接池");

Connection conByPool1 = getConByPool();

System.out.println("拿出一个有:"+pool.size()+"个连接池");

DefinedPool.close(conByPool0);

System.out.println("关闭之后有:"+pool.size()+"个连接池");

DefinedPool.close(conByPool1);

System.out.println("关闭之后有:"+pool.size()+"个连接池");
}

}

五、结果展现

初始化有:5个连接池
拿出一个有:4个连接池
拿出一个有:3个连接池
关闭之后有:4个连接池
关闭之后有:5个连接池

       如果您喜欢我写的博文,读后觉得收获很大,不妨小额赞助我一下,让我有动力继续写出高质量的博文,感谢您的赞赏!!!

自定义Mysql连接池