程序笔记   发布时间:2022-07-20  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了简易版JDBC连接池大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

JDBC连接池mini版的实现

首先是工具类 DbUtil

  • 主要参数就是Driver、User、PWD等啦,主要用于建立连接
  • URL需要注意的是SSL和serverTimezone参数,和MySQl驱动版本有关
public class DbUtil {
    private static final String DRIVER = "com.mysql.cj.jdbc.Driver";
    private static final String URL = "jdbc:mysql://127.0.0.1:3306/school?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=UTC";
    private static final String USER = "root";
    private static final String PWD = "123456";

    public static Connection getConnection(){

        try {
            Class.forName(DRIVER);
            Connection conn = (Connection) DriveRMANager.getConnection(URL,USER,PWD);
            System.out.println("generate a new connection:"+conn.hashCode());
            return conn;
        } catch (Exception E) {
            e.printStackTrace();
            return null;
        }
    }
}

DBPool连接池

  • 设置的一个最大容量为20的连接池
  • 使用静态代码块进行初始化,初始化用到的锁会在后面继续介绍
  • 主要包含三个方法,建立连接、扩充连接池和回收连接

public class DBPool {
    private static final int max = 20;
    private static final int min = 5;
    private static int poolSize = 0;

    private DBPool(){}

    private static ConcurrentLinkedQueue<Connection> pool = new ConcurrentLinkedQueue<Connection>();

    static {
        if (poolSize == 0 && pool.isEmpty()){
            synchronized (DBPool.class){
                if (poolSize == 0 && pool.isEmpty()){
                    try {
                        System.out.println("连接池为空,正在初始化");
                        for (int i = 0; i < min; i++) {
                            pool.add(DbUtil.getConnection());
                            poolSize++;
                        }
                    }catch (Exception E){
                        e.printStackTrace();
                    }
                }
            }
        }
    }

    public static Connection getConnection(){
        try {
            if (!pool.isEmpty()){
                System.out.println("获得连接");
                return pool.remove();
            }else {
                System.out.println("正在扩大连接池");
                dilatation(5);
                System.out.println("正在获得连接");
                while (true){
                    if (!pool.isEmpty()){
                        System.out.println("获得连接");
                        return pool.remove();
                    }
                }
            }
        }catch (Exception E){
            e.printStackTrace();
            return null;
        }
    }

    public static void dilatation(int num){
        if (poolSize > maX){
            System.out.println("超过连接池最大数量");
            return;
        }
        for (int i = 0; i < num; i++) {
            pool.add(DbUtil.getConnection());
            poolSize++;
        }
    }

    public static void close(Connection conn){
        pool.add(conn);
        System.out.println("回收成功");
    }
}

JDBCTest测试类


public class JDBCTest {
    public static void main(String[] args) {
        Connection c1 = DBPool.getConnection();
        DBPool.close(c1);
        System.out.println("该连接为:"+c1.hashCode());

       for (int i = 0; i < 20; i++) {
            System.out.println("连接"+i+" :"+DBPool.getConnection());
        }
    }
}

大佬总结

以上是大佬教程为你收集整理的简易版JDBC连接池全部内容,希望文章能够帮你解决简易版JDBC连接池所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。