zoukankan      html  css  js  c++  java
  • DBCP连接池

     1、DBCP连接池

      1.1 DBCP也是一个开源的连接池,是Apache Common成员之一,tomcat内置连接池

      db.properties文件

    driver=com.mysql.jdbc.Driver
    url=jdbc:mysql://localhost:3306/web?useUnicode=true&characterEncoding=utf8
    username=root
    password=root

      DBCPUtils.java代码

    package com.rookie.bigdata.utils;
    
    import org.apache.commons.dbcp.BasicDataSourceFactory;
    
    import javax.sql.DataSource;
    import java.io.IOException;
    import java.io.InputStream;
    import java.sql.Connection;
    import java.sql.SQLException;
    import java.util.Properties;
    
    /**
     * @author
     * @date 2019/1/13
     */
    public class DBCPUtils {
        private static DataSource dataSource;
    
        static {
            //加载配置文件
            InputStream resourceAsStream = DBCPUtils.class.getClassLoader().getResourceAsStream("db.properties");
    
            try {
                //使用Properties处理输入流
                Properties properties = new Properties();
                properties.load(resourceAsStream);
                //创建数据源
                dataSource = BasicDataSourceFactory.createDataSource(properties);
            } catch (Exception e) {
                e.printStackTrace();
            }
    
        }
    
        public static DataSource getDataSource() {
    
            return dataSource;
        }
    
        public static Connection getConnection() {
            try {
                return dataSource.getConnection();
            } catch (SQLException e) {
                throw  new RuntimeException(e);
            }
        }
    
    }

     测试代码

      

    package com.rookie.bigdata.utils;
    
    import org.junit.Test;
    
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.SQLException;
    
    
    /**
     * @author
     * @date 2019/1/13
     */
    public class DBCPUtilsTest {
        @Test
        public void test1() throws SQLException {
            Connection connection = DBCPUtils.getConnection();
    
            String sql="insert into H_USER values(?,?,?)";
            PreparedStatement preparedStatement = connection.prepareStatement(sql);
    
            preparedStatement.setInt(1,4);
            preparedStatement.setString(2,"lisi");
            preparedStatement.setInt(3,24);
    
            int i = preparedStatement.executeUpdate();
            System.out.println(i);
    
    
        }
    
    }

    连接池配置属性

      

    initialSize  
    
         初始化连接,连接池启动时创建的初始化连接数量(默认值为0)
    
    maxActive  
         最大活动连接,连接池中可同时连接的最大的连接数(默认值为8)
    
    minIdle 
         最小空闲连接,连接池中最小的空闲的连接数,低于这个数量会被创建新的连接(默认为0,该参数越接近maxIdle,性能越好,因为连接的创建和销毁,都是需要消耗资源的;但是不能太大,因为在机器很空闲的时候,也会创建低于minidle个数的连接,类似于jvm参数中的Xmn设置)
    
    maxIdle   
         最大空闲连接,连接池中最大的空闲的连接数,超过的空闲连接将被释放,如果设置为负数表示不限制(默认为8个,maxIdle不能设置太小,因为假如在高负载的情况下,连接的打开时间比关闭的时间快,会引起连接池中idle的个数上升超过maxIdle,而造成频繁的连接销毁和创建,类似于jvm参数中的Xmx设置)
    
    maxWait 
         从池中取连接的最大等待时间,单位ms.当没有可用连接时,连接池等待连接释放的最大时间,超过该时间限制会抛出异常,如果设置-1表示无限等待(默认为无限)
    
    validationQuery 
         验证使用的SQL语句
    
    testWhileIdle    
         指明连接是否被空闲连接回收器(如果有)进行检验.如果检测失败,则连接将被从池中去除.
    
    testOnBorrow    
         借出连接时不要测试,否则很影响性能。一定要配置,因为它的默认值是true。false表示每次从连接池中取出连接时,不需要执行validationQuery = "SELECT 1" 中的SQL进行测试。若配置为true,对性能有非常大的影响,性能会下降7-10倍。
    
    timeBetweenEvictionRunsMillis
         每30秒运行一次空闲连接回收器,配置timeBetweenEvictionRunsMillis = "30000"后,每30秒运行一次空闲连接回收器(独立线程)。并每次检查3个连接,如果连接空闲时间超过30分钟就销毁。销毁连接后,连接数量就少了,如果小于minIdle数量,就新建连接,维护数量不少于minIdle,过行了新老更替。
    
    minEvictableIdleTimeMillis
         池中的连接空闲30分钟后被回收
    
    numTestsPerEvictionRun
         在每次空闲连接回收器线程(如果有)运行时检查的连接数量
    
    removeAbandoned
         连接泄漏回收参数,当可用连接数少于3个时才执行
    
    removeAbandonedTimeout
         连接泄漏回收参数,180秒,泄露的连接可以被删除的超时值

    具体可以参考官网:http://commons.apache.org/proper/commons-dbcp/configuration.html

  • 相关阅读:
    声明对象指针,调用构造、析构函数的多种情况
    [C++ STL] 常用算法总结
    [C++ STL] map使用详解
    [C++ STL] set使用详解
    [C++ STL] list使用详解
    [C++ STL] deque使用详解
    Servlet课程0424(一) 通过实现Servlet接口来开发Servlet
    CSS盒子模型
    Spring学习之第一个hello world程序
    Java基础面试题
  • 原文地址:https://www.cnblogs.com/haizhilangzi/p/10262383.html
Copyright © 2011-2022 走看看