美文网首页程序员
连接池---自定义链接

连接池---自定义链接

作者: 常威爆打来福 | 来源:发表于2017-09-10 13:36 被阅读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);
            }
        }
    }
}
结果显示

相关文章

  • 连接池---自定义链接

    一 连接池概念数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新...

  • DBUtiles的使用

    自定义连接池: 学会用resourcebundle来加载properties文件 运用连接池的技术 连接池技术原理...

  • JDBC 进阶——连接池

    本文包括传统JDBC的缺点连接池原理自定义连接池开源数据库连接池DBCP连接池C3P0连接池Tomcat内置连接池...

  • JAEE学习笔记(19)事物与连接池

    目录 1.事务2.连接池 1.连接池概念 2.自定义连接池 3.开源连接池(c3p0) 复习: =========...

  • Day_02_C3P0+DBUtils

    学会自定义连接池 装饰者设计模式 C3P0连接池 JavaBean DBUtils

  • 自定义数据库连接池

    一、自定义数据库连接池实现思想 依赖的jar依赖的jar包 1、思想步骤 1、链接池类 2、制定全局参数,初始化数...

  • 数据库连接池

    自定义连接池 只是简化的说明原理,而不是真实上线使用 第三方连接池 常用连接池: DBCP C3P0 DBCP ...

  • mysql连接池关于连接数太多导致的错误处理办法

    创建连接池 修改mysql的最大链接数

  • 2.自定义连接池的实现

    常用的连接池技术包括:DBCP | C3P0,都是十分成熟稳定的连接池技术。本文目的是通过一个自定义的连接池来模仿...

  • 数据库连接池,wtforms的使用

    目录 数据库连接池pymsql链接数据库数据库连接池版 wtforms的使用使用1使用2 16.数据库连接池 py...

网友评论

    本文标题:连接池---自定义链接

    本文链接:https://www.haomeiwen.com/subject/xvbzjxtx.html