# 内功篇-jdbc连接池实现

# 连接池目的

减少频繁的创建销毁,节省性能开销

# 回顾一下jdbc操作的七个步骤

1.加载驱动
2.获得Connection
3.通过Tcp连接数据库
4.发送sql
5.执行sql,返回结果
6.关闭tcp连接
7.释放Connection

# 如何减少性能开销

分析:通过jdbc操作步骤,我们不难发现4,5是主要操作的,其它都是重复的。
策略:连接复用,在系统初始化就建立好连接。发sql就从连接池拿connection

# 实现

将连接保存在集合中,当需要连接时候从集合中取,释放连接时并不是真正释放,而是归还给集合。达到复用目的

public class ConnectionPool implements DataSource {
    private static final String driver = "com.mysql.jdbc.Driver";
    private static final String dbUrl = "jdbc:mysql://localhost:3306/db_blog?useSSL=true";
    private static final String userName  = "root";
    private static final String password= "123456";

    private LinkedList<Connection> pool;

    private Connection getOneConnection() {
        Connection connection = null;
        try {
            Class.forName(driver);
            connection = DriverManager.getConnection(dbUrl,userName,password);
        } catch (ClassNotFoundException | SQLException e) {
            e.printStackTrace();
        }
        return connection;
    }
    @Override
    public Connection getConnection() throws SQLException {
        if(pool==null){
            pool = new LinkedList<>();
            for(int i=0;i<2;i++){
                pool.add(getOneConnection());
            }
        }
        if(pool.size()<=0){
            pool.add(getOneConnection());
        }
        return pool.remove();
    }
    public void close(Connection connection){
        pool.add(connection);
    }
    //省略其他实现...
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
全量分析

评 论:

上次更新时间: 11/18/2019, 4:11:24 PM