数据库连接池

2019-03-26  本文已影响0人  旦暮何枯

因为每次创建一个数据库链接都是一次极大的资源消费,所以连接复用。通过建立一个数据库连接池以及一套连接使用管理策略,可以使一个数据库连接可以得到高效、安全的复用,能避免了数据库连接频繁建立、关闭的开销。

连接池的本质:介于 Java 应用 和 JDBC 之间的 Java 架包.

使用 数据库连接池,需要先引入 3 个架包:

调用 connection.close() 方法,在连接池中被重写,在连接池中调用 close 方法,是释放归还数据库连接,供其他线程调用,并不是销毁连接。

流程

1.导入 3 个架包
2.初始化连接池
3.通过连接池连接数据库(类似JDBC)
4.拿到结果
5.清理环境

import org.apache.commons.dbcp2.BasicDataSource;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class HelloDBCP {
    public static BasicDataSource ds = null;
    public static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
    public static final String JDBC_URL = "jdbc:mysql://localhost/test?useSSL=true";
    public static final String USER = "root";
    public static final String PASSWORD = "admin";

//    初始化 连接池
    public static void dbpoolInit() {
        ds = new BasicDataSource();
        ds.setDriverClassName(JDBC_DRIVER);
        ds.setUrl(JDBC_URL);
        ds.setUsername(USER);
        ds.setPassword(PASSWORD);
    }

    public  void dsPoolTest() {
        Connection conn = null;
        Statement stat = null;
        ResultSet rs = null;
        try {
            conn = ds.getConnection();
            stat = conn.createStatement();
            rs = stat.executeQuery("select * from user");

            while (rs.next()) {
                System.out.println(rs.getString("name"));
            }

        } catch (SQLException e) {
            e.printStackTrace();
        } finally {

            try {
                if (conn != null)
                    conn.close();
                if (stat != null)
                    stat.close();
                if (rs != null)
                    rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args) {
        dbpoolInit();
        new HelloDBCP().dsPoolTest();
    }
}

连接池参数配置

BAsicDataSource

.setInitialSize() 在连接池启用的时候预制一定数量的数据库连接
.setMaxTotal() 连接池最大线程连接数
.setMaxWaitMillis() 线程最大等待时间
.setMaxIdle() 空闲连接数超过该设置,连接池销毁数据库连接
.setMinIdle() 空闲连接数低于该设置,连接池创建数据库连接
.setTestWhileIdle(True) 检查空闲数据库连接是否已与数据库断开连接,断开后销毁连接
.setMinEvictableIdleTimeMillis() 销毁连接的最小连接时间,当连接时间超过该设置,被自动销毁
.setTimeBetweenEvicationRunsMillis() 检查运行时间的间隔

『项目地址』:https://github.com/wengfe/JAVA/blob/master/HelloJDBC/src/HelloDBCP.java
上一篇 下一篇

猜你喜欢

热点阅读