数据库连接池其实就是一个容器(集合),存放数据库连接的容器。当系统初始化好后,容器被创建,容器中会申请一些请求对象,当用户来访问数据库时,从容器中获取连接对象,用户访问完之后,会将连接对象归还给容器。
简单总结:数据库连接池负责分配,管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个,跟线程池有异曲同工之处
最小连接数是连接池一直保持的数据库连接,所以如果应用程序对数据库连接的使用量不大,将会有大量的数据库连接资源被浪费。
最大连接数是连接池能申请的最大连接数,如果数据库连接请求超过此数,后面的数据库连接请求将被加入到等待队列中,这会影响之后的数据库操作。
最小连接数与最大连接数相差太大,那么最先的连接请求将会获利,之后超过最小连接数量的连接请求等价于建立一个新的数据库连接。不过,这些大于最小连接数的数据库连接在使用完不会马上被释放,它将被放到连接池中等待重复使用或是空闲超时后被释放。
求阻塞概率是衡量一个数据库连接池系统服务质量的重要指标。若请求阻塞概率过高,则应为系统配置更高的最大连接数。
系统平均连接数反映了系统运行稳定后系统的实际并发用户数,它为数据库连接池技术配置参数提供了重要理论依据。
系统利用率,即连接用户数与连接池可建立的最大连接数的比。系统利用率的高低直接关系系统资源的使用情况,分析系统利用净的影响因素,对数据库连接池技术的参数配置有着重要参考意义。
系统吞吐量直接反映整个系统处理连接请求的能力,是衡量系统性能的重要指标。
Java数据库连接池标准接口:DataSource Javax.sql包下
注: 无论使用哪种数据库连接池,数据库连接的基本驱动jar包都是必须且基础需要的
阿里技术团队提供,相较于其他产品,中文文档比较全面
/*
* Druid连接池的工具类
*/
public class JDBCUtils {
// 1. 定义成员变量 DataSource
private static DataSource ds;
static {
try {
// 1. 加载配置文件
Properties pro = new Properties();
pro.load(JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties"));
// 2. 获取DataSource
ds = DruidDataSourceFactory.createDataSource(pro);
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
// 获取连接
public static Connection getConnection() throws SQLException {
return ds.getConnection();
}
// 释放资源
public static void close(Statement stmt, Connection conn) {
if(stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn != null) {
try {
conn.close(); // 归还连接
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public static void close(ResultSet rs, Statement stmt, Connection conn) {
if(rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn != null) {
try {
conn.close(); // 归还连接
} catch (SQLException e) {
e.printStackTrace();
}
}
}
// 获取连接池方法
public static DataSource getDataSource() {
return ds;
}
}