zoukankan      html  css  js  c++  java
  • 数据源连接池

    一、数据源连接池

    1、为什么需要使用连接池

    ​ 由于数据库的连接和关闭是一项非常耗时的任务,而用户在操作数据时会频繁的对数据库资源访问和关闭,为了提高数据库连接的性能,提高系统运行效率,提出用专门的容器管理数据库的连接和释放 ,数据库连接池就是为了解决这一问题而发明的。

    2、什么是连接池

    ​ 数据库连接池表示用于分配、管理、释放数据库连接的容器, 可以有效提高数据库连接的复用性和性能,可以将一个连接多次使用,而不释放给数据库。 可以通过设置各项参数(例如最大连接数,最大空闲时间,等待连接时长 )

    ​ 类似这样的容器还有很多,例如 常量池,线程池

    ​ 一般在项目开发中使用开源的数据库连接池 ,常用 c3p0 、dbcp、德鲁伊连接池 ,也可以自定义连接池 ,

    ​ 基本原理: 容器初始化默认获取n个连接 , 应用程序需要建立连接直接从容器中获取,一旦容器的连接池分配完毕,但没有超出容器连接上限,此时可以继续从数据库建立连接, 应用程序使用完将连接对象释放给容器 , 以便再次使用 ,如果容器的连接超出默认连接数,会自动释放多余的连接。如果连接数超时容器设置的最大连接数,则不会获取新的连接,需要等待其他资源释放才可使用。

    3、自定义连接池理解连接池原理

    ​ 假设有一个存放连接对象的容器 ,可以使用集合存储连接对象(Connection) ,

    4、使用开源的连接池

    1、DBCP连接池(DataBase Connection Pool)

    数据库开源连接池 提供一些基础配置,在管理连接池之前,需要配置数据源 DataSource

    ​ 步骤1:导入开源jar包

    ​ commons-dbcp.jar 、

    ​ commons-pool.jar

    ​ 步骤2: 写dbcp.properties配置文件

    driverClassName=com.mysql.cj.jdbc.Driver
    url=jdbc:mysql://localhost:3306/j2008_db?useSSL=false&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true
    username=root
    password=123456
    #最大连接数
    maxActive=50
    #最小连接数
    minIdle=10
    #最小空闲数
    maxIdle=10
    #初始化连接数
    initialSize=5
    #空闲线程超时回收时间
    removeAbandonedTieout=10
    #最大等待时间  毫秒
    maxWait=1000
    

    步骤三:

        //  也通过读配置文件,将配置信息加载
            try {
                // 1、读取配置文件
                InputStream is =DBCPUtil.class.getClassLoader().getResourceAsStream("dbcp.properties");
                Properties prop = new Properties();
                // 2、加载属性文件
                prop.load(is);
                //3、 通过数据源工厂类
                ds = BasicDataSourceFactory.createDataSource(prop);
            } catch (Exception e) {
                e.printStackTrace();
            }
    

    步骤四: 测试并获取连接对象

     /**
         * 获取数据源连接对象
         * @return
         */
        public static Connection getConn(){
    
            try {
                if(ds!=null) {
                    return ds.getConnection();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
    
            return null;
        }
    

    2 Druid连接池

    DRUID是阿里巴巴开源平台上一个数据库连接池实现,它结合了C3P0、DBCP、PROXOOL等DB池的优点,同时加入了日志监控,可以很好的监控DB池连接和SQL的执行情况,可以说是针对监控而生的DB连接池(据说是目前最好的连接池,不知道速度有没有BoneCP快)。

    ​ 替换前一个dbcp的jar包

    ​ druid-1.1.22.jar

    其他配置于dbcp的非常相似

    和其它连接池一样DRUID的DataSource类为:com.alibaba.druid.pool.DruidDataSource

    常用配置如下:

     <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" 
      init-method="init" destroy-method="close"> 
      <property name="driverClassName" value="${jdbc.driverClassName}" /> 
      <property name="url" value="${jdbc.url}" /> 
      <property name="username" value="${jdbc.username}" /> 
      <property name="password" value="${jdbc.password}" /> 
      <!-- 配置初始化大小、最小、最大 --> 
      <property name="initialSize" value="1" /> 
      <property name="minIdle" value="1" /> 
      <property name="maxActive" value="10" />
     
      <!-- 配置获取连接等待超时的时间 --> 
      <property name="maxWait" value="10000" />
     
      <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 --> 
      <property name="timeBetweenEvictionRunsMillis" value="60000" />
     
      <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 --> 
      <property name="minEvictableIdleTimeMillis" value="300000" />
     
      <property name="testWhileIdle" value="true" />
     
      <!-- 这里建议配置为TRUE,防止取到的连接不可用 --> 
      <property name="testOnBorrow" value="true" /> 
      <property name="testOnReturn" value="false" />
     
      <!-- 打开PSCache,并且指定每个连接上PSCache的大小 --> 
      <property name="poolPreparedStatements" value="true" /> 
      <property name="maxPoolPreparedStatementPerConnectionSize" 
       value="20" />
     
      <!-- 这里配置提交方式,默认就是TRUE,可以不用配置 -->
     
      <property name="defaultAutoCommit" value="true" />
     
      <!-- 验证连接有效与否的SQL,不同的数据配置不同 --> 
      <property name="validationQuery" value="select 1 " /> 
      <property name="filters" value="stat" /> 
      <property name="proxyFilters"> 
       <list> 
        <ref bean="logFilter" /> 
       </list> 
      </property> 
     </bean>
    
    

    在代码中创建数据源

    druid.properties:

    driverClassName=com.mysql.cj.jdbc.Driver
    url=jdbc:mysql://localhost:3306/j2008_db?useSSL=false&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true
    username=root
    password=123456
        其他基础配置同上
    
    static DataSource ds ;
        static{
            try {
                // 1、读取配置文件
                InputStream is =DBCPUtil.class.getClassLoader().getResourceAsStream("druid.properties");
                Properties prop = new Properties();
                // 2、加载属性文件
                prop.load(is);
                //3、 通过数据源工厂类
                 ds = DruidDataSourceFactory.createDataSource(prop);
                System.out.println(ds.getConnection());
           } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
  • 相关阅读:
    201771030123-王爽 实验一 软件工程准备—阅读《现代软件工程—构建之法》并提问
    《面向对象程序设计课程学习进度条》
    201771010132-徐思 实验四 软件项目案例分析
    201771010132-徐思 实验三 结对项目-《西北师范大学疫情防控信息系统》
    201771010132-徐思 实验一 软件工程准备-浏览《构建之法》
    徐思201771010132 《面向对象程序设计(java)》课程学习总结
    徐思 201771010132
    徐思201771010132《面向对象程序设计(java)》第十六周学习总结
    徐思201771010132《面向对象程序设计(java)》第十五周学习总结
    徐思201771010132《面向对象程序设计(java)》第十四周学习总结
  • 原文地址:https://www.cnblogs.com/z5452830/p/14053522.html
Copyright © 2011-2022 走看看