连接池的工作原理
一般情况
如图所示,T1为连接建立时间,T2为使用时间,T3为连接销毁时间
连接池的工作原理
而使用连接池可以解节约连接创建和销毁时的性能消耗,提升响应时间,只有T2时间!
连接池的作用
连接池
Java中定义了关于连接池的接口,即javax.sql.DataSource接口,该接口规范了连接池获取连接的方法以及连接回收的方法。
任何具体的连接池都仅是该接口的具体实现!!!不同的只有性能和拓展功能!!!
Druid
1.resource下创建配置文件druid。properties
driverClassName=com.mysql.cj.jdbc.Driver
username=root
password=123456
url=jdbc:mysql://localhost:3306/test
代码
package com.druid;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import com.alibaba.druid.pool.DruidPooledConnection;
import org.junit.jupiter.api.Test;
import javax.sql.DataSource;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;
public class DruidTest1 {
/**
* 硬编码使用druid
*/
@Test
public void test() throws SQLException {
//1.创建druid连接池对象
DruidDataSource dataSource = new DruidDataSource();
//2.设置连接池参数 必须设置的参数
dataSource.setUrl("jdbc:mysql://localhost:3306/test");
dataSource.setUsername("root");
dataSource.setPassword("123456");
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
// 非必须参数
dataSource.setInitialSize(5); // 初始化连接池数量
dataSource.setMaxActive(10); // 最大连接数量
DruidPooledConnection connection = dataSource.getConnection();
String sql = "select * from test.t_bank";
PreparedStatement statement = connection.prepareStatement(sql);
ResultSet resultSet = statement.executeQuery();
while (resultSet.next()){
int id = resultSet.getInt("id");
String account = resultSet.getString("account");
int money = resultSet.getInt("money");
System.out.println(id + " " + account + " " + money);
}
connection.close();
}
/**
* 通过读取外部配置文件的方法,实例化druid连接池
*/
@Test
public void test2() throws Exception {
Properties properties = new Properties();
InputStream in = DruidTest1.class.getResourceAsStream("/druid.properties");
properties.load(in);
DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);
Connection connection = dataSource.getConnection();
String sql = "select * from test.t_bank";
PreparedStatement statement = connection.prepareStatement(sql);
ResultSet resultSet = statement.executeQuery();
while (resultSet.next()){
int id = resultSet.getInt("id");
String account = resultSet.getString("account");
int money = resultSet.getInt("money");
System.out.println(id + " " + account + " " + money);
}
connection.close();
}
}
结果
三月 31, 2023 6:35:00 下午 com.alibaba.druid.pool.DruidDataSource info
信息: {dataSource-1} inited
1 ergouzi 2500
2 lvdd 500
Process finished with exit code 0