赞
踩
连接池是connection对象的缓冲区,他里面会存放一些connection,当程序需要使用connection时,如果连接池中有,则直接从连接池获取,不需要再重新创建connection。连接池让程序能够复用连接。
每次创建和销毁连接都会带来较大的系统开销
每次创建和销毁连接都需要时间
可以防止大量用户并发访问数据库服务器
资源重用
更快地响应速度
新的资源分配手段
统一的连接管理,避免数据库连接泄露
1、连接池维护着两个容器空闲池和活动池
2、空闲池用于存放未使用的连接,活动池存放正在使用的连接,活动池中的连接使用完之后要归还回空闲池
3、当需要连接时,先判断空闲池是否有连接,如果有则取出一个放置到活动池供程序使用
4、如果没有,则判断活动池中连接是否达到最大连接数,如果没有,则创建一个连接放到活动池供程序使用。
5、如果空闲池中没有连接,活动池中连接也达到上限,则不能创建新连接,此时会判断是否等待超时,如果没有等待超时则需等待活动池中的连接归还回空闲池
6、如果等待超时,可以采取多种处理方式,例如:直接抛出异常,或将活动池中使用最久的连接移除掉归还回空闲池以供程序使用
1、DataSource接口
JDBC数据库连接池使用javax.sql.DataSource来表示,DataSource只是一个接口,所有java数据库连接池都需要实现该接口。
2、常见数据库连接池
DBCP C3P0 Proxool HikariCP Druid
3、Druid连接池的使用
(1)加入jar包
(2)创建druid连接池的配置文件druid.properties文件
步骤:new directory(名称:resource)-选中resource,右键标记为mark directory as directory root
,接着右键文件夹,new File,创建druid.properties文件
- driverClassName=com.mysql.jdbc.Driver
- #这里注意url写的是自己的数据库
- url=jdbc:mysql://localhost:3306/day18?characterEncoding=utf8
- username=root
- password=123456
- #初始化连接数
-
- initialSize=5
- #最大活动连接数
- maxActive=10
- #最大等待时间
- maxWait=1000
(3)接着创建class文件,测试配置
- import com.alibaba.druid.pool.DruidDataSourceFactory;
- import org.junit.Test;
-
- import javax.sql.DataSource;
- import java.io.FileInputStream;
- import java.io.IOException;
- import java.sql.Connection;
- import java.util.Properties;
-
- public class TestDataSource {
- @Test
- public void test01() throws Exception {
- //1、创建properties对象,让其去读取druid.properties文件
- Properties properties = new Properties();
- //1.1将druid.properties配置文件转成字节输入流
- FileInputStream is = new FileInputStream("E:\\java\\MySQL_Test\\resources\\druid.properties");
- //1.2使用properties对象加载流
- properties.load(is);
-
- //2、使用DruidDataSourceFactory创建Druid对象,这里包名选择的时候注意要选择短的,长的是Druid对mybatis框架的支持
- DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);
-
- //3、从连接池中取出一个连接使用
- Connection conn1 = dataSource.getConnection();
- Connection conn2 = dataSource.getConnection();
- Connection conn3 = dataSource.getConnection();
- Connection conn4 = dataSource.getConnection();
- Connection conn5 = dataSource.getConnection();
- Connection conn6 = dataSource.getConnection();
- Connection conn7 = dataSource.getConnection();
-
- //4、归还连接:没有使用连接池的时候connection.close()就是销毁连接,
- // 如果是从连接池中取出的connection对象调用close()方法,就是将连接归还给连接池
- //底层原理是动态代理
- conn1.close();
-
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。