目录:
一、需求
二、传统链接
三、自定义连接池
四、代码展现
五、结果展现
———————————————————————————————————
一、需求
自定义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个连接池
如果您喜欢我写的博文,读后觉得收获很大,不妨小额赞助我一下,让我有动力继续写出高质量的博文,感谢您的赞赏!!!