连接池---自定义链接

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

  • 指定初始化连接数目程序启动时就执行创建
  • 指定最大连接数目
  • 指定当前使用连接数目

三 实现过程

  • 指定全局变量:初始化数目,最大连接数,当前连接数,连接池集合
  • 构造函数:循环创建 “初始化数目” 连接
  • 数据库连接方法
  • 获取连接
    • 池中有连接,直接拿
    • 池中没有连接,判断是否达到做大连接数;达到,抛出异常;没有达到最大连接数,创建新的连接
  • 释放和连接(连接放回集合中)
    四 代码
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);
            }
        }
    }
}
结果显示
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 最原始的数据库连接就是我们打开一个连接,使用过后再关闭该链接来释放资源。频繁的新建打开再关闭连接对jvm和数据库都...
    野柳阅读 11,551评论 1 11
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,230评论 19 139
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,462评论 30 472
  • 最近几天因为小宝感冒晚上睡不好,侯耀斐也跟着受影响,早晨叫她起床还睡眼朦胧,想让她自己睡又说害怕,哎只能慢慢来...
    侯耀斐妈妈阅读 1,657评论 1 4
  • 不少的写作者,尤其是所谓的严肃文学作者,特别喜欢在故事里藏一些“私货”,生怕读者不相信这世界没救了,也生怕大家不把...
    炼屁士阅读 2,948评论 0 3

友情链接更多精彩内容