当前位置:   article > 正文

MySQL-连接池_mysql连接池

mysql连接池

一、连接池概念

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文件

  1. driverClassName=com.mysql.jdbc.Driver
  2. #这里注意url写的是自己的数据库
  3. url=jdbc:mysql://localhost:3306/day18?characterEncoding=utf8
  4. username=root
  5. password=123456
  6. #初始化连接数
  7. initialSize=5
  8. #最大活动连接数
  9. maxActive=10
  10. #最大等待时间
  11. maxWait=1000

(3)接着创建class文件,测试配置

  1. import com.alibaba.druid.pool.DruidDataSourceFactory;
  2. import org.junit.Test;
  3. import javax.sql.DataSource;
  4. import java.io.FileInputStream;
  5. import java.io.IOException;
  6. import java.sql.Connection;
  7. import java.util.Properties;
  8. public class TestDataSource {
  9. @Test
  10. public void test01() throws Exception {
  11. //1、创建properties对象,让其去读取druid.properties文件
  12. Properties properties = new Properties();
  13. //1.1将druid.properties配置文件转成字节输入流
  14. FileInputStream is = new FileInputStream("E:\\java\\MySQL_Test\\resources\\druid.properties");
  15. //1.2使用properties对象加载流
  16. properties.load(is);
  17. //2、使用DruidDataSourceFactory创建Druid对象,这里包名选择的时候注意要选择短的,长的是Druid对mybatis框架的支持
  18. DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);
  19. //3、从连接池中取出一个连接使用
  20. Connection conn1 = dataSource.getConnection();
  21. Connection conn2 = dataSource.getConnection();
  22. Connection conn3 = dataSource.getConnection();
  23. Connection conn4 = dataSource.getConnection();
  24. Connection conn5 = dataSource.getConnection();
  25. Connection conn6 = dataSource.getConnection();
  26. Connection conn7 = dataSource.getConnection();
  27. //4、归还连接:没有使用连接池的时候connection.close()就是销毁连接,
  28. // 如果是从连接池中取出的connection对象调用close()方法,就是将连接归还给连接池
  29. //底层原理是动态代理
  30. conn1.close();
  31. }
  32. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/924201
推荐阅读
相关标签
  

闽ICP备14008679号