JAVA jdbc 数据库连接池

数据库连接池

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

模拟实现数据库连接池

  模拟实现数据库连接池
import com.qianfeng.DBUtil;

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

public class FastConnectionPool {
    //存储连接的容器
    private static LinkedList<Connection> list=new LinkedList<>();

    static {
        //初始化连接容器
        for (int i = 0; i < 20; i++) {
            try {
                list.add(DBUtil.getConnection());
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
    public static Connection getConnection(){
        return list.removeFirst();
    }
    public static void recovery(Connection connection){
        list.add(connection);
    }
}

连接池规范

DataSource
连接池各有各的实现方式,所以sun公司定义了一个标准,DataSource
接口DataSource
1.	所以上述我们实现的连接要符合sun公司的规范,就需要实现接口DataSource,所以我们可以编写一个MyDataSource类
2.	之后就是面向Datasource来编程,但是会遇到问题,连接资源怎么关闭?
3.	装饰模式来帮忙

使用过程,重点是要实现close方法

装饰设计模式(包装模式)
目的:改写已存在的类的某个方法或某些方法
步骤:
1,编写一个类A,实现与被包装类相同的接口(具备相同行为)
2,在类A中,定义一个被包装类的类型对象
3,在类A中,定义构造方法,把被包装类的对象注入,给被包装类变量赋值
4,对于不需要改写的方法,调用原有的方法
5,对于需要改写的方法,写自己的代码
编写一个MyConnection 实现 Connection
定义Connection conn对象
定义LinkedList<Connection> pool;
通过构造方法对上述两个值进行初始化
Public MyConnection(Connection conn, LinkedList<Connection> pool){
     //....
}
重写close方法
Public void close(){
  pool.addLast(conn);
}

//所以在我们编写的Datasource里面,获取连接的方法需要将原本的conn对象进行包装
LinkedList<Connection> pool = new LinkedList<Connection>();//数据源内部包含的一个连接池
Public Connection getConnection(){
   Connection conn = DBUtils.getConnection();
   MyConnection mc = new MyConnection(conn,pool);
   return mc;
}
public class MyConnectionPool implements DataSource {
    private static LinkedList<Connection> list=new LinkedList<>();

    static {
        for (int i = 0; i < 20; i++) {
            try {
                list.add(new MyConnection(DBUtil.getConnection(),list));
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
@Override
    public Connection getConnection() throws SQLException {
       return list.removeFirst();
    }
@Override
    public void close() throws SQLException {
      //将连接对象回收到连接池中
        list.add(this);
    }

德鲁伊连接池

Druid 是目前比较流行的高性能的,它有如下几个特点:
一. 亚秒级查询
     druid提供了快速的聚合能力以及亚秒级的查询能力,多租户的设计,是面向用户分析应用的理想方式。

二.实时数据注入
     druid支持流数据的注入,并提供了数据的事件驱动,保证在实时和离线环境下事件的实效性和统一性

三.可扩展的PB级存储
     druid集群可以很方便的扩容到PB的数据量,每秒百万级别的数据注入。即便在加大数据规模的情况下,也能保证时其效性

四.多环境部署
     druid既可以运行在商业的硬件上,也可以运行在云上。它可以从多种数据系统中注入数据,包括hadoop,spark,kafka,storm和samza等

五.丰富的社区
     druid拥有丰富的社区,供大家学习
  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值