美文网首页
数据库连接池

数据库连接池

作者: 旦暮何枯 | 来源:发表于2019-03-26 13:15 被阅读0次

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

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

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

  • commons-logging
  • commons-dbcp2
  • commons-pool2
    前两个架包可以直接在 apache 找到, pool2 架包在 码农文库中找到;

调用 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

相关文章

网友评论

      本文标题:数据库连接池

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