成都旅游网站建设规划方案,网站代码生成网站,平面设计图100张,网站建设合同技术开发合同范本一、连接池概念
1、概念
连接池是connection对象的缓冲区#xff0c;他里面会存放一些connection#xff0c;当程序需要使用connection时#xff0c;如果连接池中有#xff0c;则直接从连接池获取#xff0c;不需要再重新创建connection。连接池让程序能够复用连接。
2…一、连接池概念
1、概念
连接池是connection对象的缓冲区他里面会存放一些connection当程序需要使用connection时如果连接池中有则直接从连接池获取不需要再重新创建connection。连接池让程序能够复用连接。
2、为什么使用连接池
每次创建和销毁连接都会带来较大的系统开销
每次创建和销毁连接都需要时间
可以防止大量用户并发访问数据库服务器
3、连接池优势
资源重用
更快地响应速度
新的资源分配手段
统一的连接管理避免数据库连接泄露
4、连接池原理
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文件
driverClassNamecom.mysql.jdbc.Driver
#这里注意url写的是自己的数据库
urljdbc:mysql://localhost:3306/day18?characterEncodingutf8
usernameroot
password123456
#初始化连接数initialSize5
#最大活动连接数
maxActive10
#最大等待时间
maxWait1000
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 {Testpublic 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();}
}