程序员

连接池---自定义链接

2017-09-10  本文已影响0人  常威爆打来福

一 连接池概念
数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。
二 思路

三 实现过程

package utils;

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

/**
 * Created by pc on 2017/9/10.
 */
public class MyConnectionPool {
     int init_count = 3; //初始化链接数目
     int max_count = 10;  //最大链接数
     int current_count = 0;  //记录当前使用的链接数
    //连接池:存放所有的初始化链接
    public LinkedList<Connection> pool = new LinkedList<Connection>();
    //1.构造函数,初始化连接放入连接池
   public MyConnectionPool(){
        for (int i = 0;i < init_count;i++){
            current_count++;//记录当前连接数
            //把链接加到连接池
            pool.addLast(creatConnection());
}
    }
    //2.创建一个新的链接方法
    public Connection creatConnection(){
        try{
            Class.forName("com.mysql.jdbc.Driver");//加载驱动
            String url = "jdbc:mysql://localhost:3306/test";//加载数据库链接
            String user = "root";//配置用户名
            String password = "root";//配置密码
            return DriverManager.getConnection(url,user,password);//获取链接
        }catch (Exception e){
            throw new RuntimeException(e);
        }
    }
    //3.获取链接
    public Connection getConnection(){
        //池中有链接直接拿
        if (pool.size() > 0){
            return  pool.removeFirst();//将第一个list集合删除并返回
        }
        //池中没有链接,判断是否达到最大连接数;如果没有,创建新的链接
        if (current_count < max_count){
            //记录当前使用的连接数
            current_count++;
            //创建链接
            return  creatConnection();
        }
        //达到最大链接,抛出异常
        throw new  RuntimeException("当前已经达到最大连接数");
    }
    //4.释放链接
    public void realeaseConnection(Connection conn){
        //判断:连接池中数目如果小于初始化连接,就放入池中
        if (pool.size() < init_count){
            pool.addLast(conn);
        }else {
            try {
                //关闭连接
                    current_count--;
                    conn.close();
            }catch (Exception e){
                throw new RuntimeException(e);
            }
        }
    }
}
结果显示
上一篇 下一篇

猜你喜欢

热点阅读