数据库连接池 订阅
数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。 展开全文
数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。
信息
影响因素
最大连接数,最小连接数
概    念
一种关键的有限的昂贵的资源
中文名
数据库连接池
功    能
分配、管理和释放数据库连接
数据库连接池背景
数据库连接是一种关键的、有限的、昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出。对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标。数据库连接池正是针对这个问题提出来的。
收起全文
精华内容
参与话题
问答
  • 数据库连接池

    万次阅读 2019-12-16 17:38:24
    数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是重新建立一个。 数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中,这些数据库连接的数量是由最小...
    基本思想:

    就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。

    数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是重新建立一个。

    数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中,这些数据库连接的数量是由最小数据库连接数来设定的。无论这些数据库连接是否被使用,连接池都将一直保证至少拥有这么多的连接数量。连接池的最大数据库连接数量限定了这个连接池能占有的最大连接数,当应用程序向连接池请求的连接数超过最大连接数量时,这些请求将被加入到等待队列中。

    多种开源的数据库连接池
    • DBCP
      是Apache提供的数据库连接池。tomcat 服务器自带dbcp数据库连接池。速度相对c3p0较快,但因自身存在BUG,Hibernate3已不再提供支持。
    • C3P0
      是一个开源组织提供的一个数据库连接池,速度相对较慢,稳定性还可以。hibernate官方推荐使用。
    • Proxool
      是sourceforge下的一个开源项目数据库连接池,有监控连接池状态的功能,稳定性较c3p0差一点。
    • BoneCP
      是一个开源组织提供的数据库连接池,速度快。
    • Druid
      是阿里提供的数据库连接池,据说是集DBCP 、C3P0 、Proxool 优点于一身的数据库连接池,但是速度不确定是否有BoneCP快。
    • DataSource
      通常被称为数据源,它包含连接池和连接池管理两个部分,习惯上也经常把 DataSource 称为连接池,DataSource用来取代DriverManager来获取Connection,获取速度快,同时可以大幅度提高数据库访问速度。

    特别注意

    • 数据源和数据库连接不同,数据源无需创建多个,它是产生数据库连接的工厂,因此整个应用只需要一个数据源即可。
    • 当数据库访问结束后,程序还是像以前一样关闭数据库连接:conn.close(); 但conn.close()并没有关闭数据库的物理连接,它仅仅把数据库连接释放,归还给了数据库连接池。

    一、C3P0数据库连接池

    1. 导入C3P0驱动jar包
    2. 声明配置文件
    c3p0-config.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <c3p0-config>
        <named-config name="helloc3p0">
            <!-- 提供获取连接的4个基本信息 -->
            <property name="driverClass">com.mysql.jdbc.Driver</property>
            <property name="jdbcUrl">jdbc:mysql:///test</property>
            <property name="user">root</property>
            <property name="password">00000000</property>
            <!-- 进行数据库连接池管理的基本信息 -->
            <!-- 当数据库连接池中的连接数不够时,c3p0一次性向数据库服务器申请的连接数 -->
            <property name="acquireIncrement">5</property>
            <!-- c3p0数据库连接池中初始化时的连接数 -->
            <property name="initialPoolSize">10</property>
            <!-- c3p0数据库连接池维护的最少连接数 -->
            <property name="minPoolSize">10</property>
            <!-- c3p0数据库连接池维护的最多的连接数 -->
            <property name="maxPoolSize">100</property>
            <!-- c3p0数据库连接池最多维护的Statement的个数 -->
            <property name="maxStatements">50</property>
            <!-- 每个连接中可以最多使用的Statement的个数 -->
            <property name="maxStatementsPerConnection">2</property>
        </named-config>
    </c3p0-config>
    
    3. 测试连接
    @Test
    public void testGetConnection() throws SQLException {
        ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource("helloc3p0");
        Connection connection = comboPooledDataSource.getConnection();
        System.out.println(connection); //com.mchange.v2.c3p0.impl.NewProxyConnection@4567f35d
    }
    
    4. 应用至工具类
    //获取数据库的连接
    public static Connection getConnection() throws Exception {
        //1.读取配置文件中的4个基本信息
        InputStream inputStream = ClassLoader.getSystemClassLoader().getResourceAsStream("jdbc.properties");
        Properties properties = new Properties();
        properties.load(inputStream);
        String user = properties.getProperty("user");
        String password = properties.getProperty("password");
        String url = properties.getProperty("url");
        String driverClass = properties.getProperty("driverClass");
        //2.加载驱动
        Class.forName(driverClass);
        //3.获取连接
        return DriverManager.getConnection(url, user, password);
    }
    

    替换为

    //数据库连接池只需提供一个即可
    private static ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource("helloc3p0");
    public static Connection getConnection() throws SQLException{
        return comboPooledDataSource.getConnection();
    }
    

    二、DBCP数据库连接池

    1.导入dbcp驱动jar包和pool驱动jar包
    2. 声明配置文件
    dbcp.properties
    driverClassName=com.mysql.jdbc.Driver
    url=jdbc:mysql:///test
    username=root
    password=00000000
    
    initialSize=10
    
    3. 测试连接
    @Test
    public void testGetConnection1() throws Exception {
        Properties properties = new Properties();
        FileInputStream inputStream = new FileInputStream(new File("src/dbcp.properties"));
        properties.load(inputStream);
        DataSource source = BasicDataSourceFactory.createDataSource(properties);
        Connection connection = source.getConnection();
        System.out.println(connection); //jdbc:mysql:///test, UserName=root@localhost, MySQL Connector Java
    }
    
    4. 应用至工具类
    //创建一个DBCP数据库连接池
    private static DataSource source;
    static {
        try {
            Properties properties = new Properties();
            FileInputStream inputStream = new FileInputStream(new File("src/dbcp.properties"));
            properties.load(inputStream);
            source = BasicDataSourceFactory.createDataSource(properties);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public static Connection getConnection() throws Exception {
        return source.getConnection();
    }
    

    三、Druid数据库连接池

    1.导入druid驱动jar包
    2. 声明配置文件
    druid.properties
    url=jdbc:mysql:///test
    username=root
    password=00000000
    driverClassName=com.mysql.jdbc.Driver
    
    initialSize=10
    maxActive=10
    
    3. 测试连接
    @Test
    public void getConnection() throws Exception {
        Properties properties = new Properties();
        InputStream inputStream = ClassLoader.getSystemClassLoader().getResourceAsStream("druid.properties");
        properties.load(inputStream);
        DataSource source = DruidDataSourceFactory.createDataSource(properties);
        Connection connection = source.getConnection();
        System.out.println(connection); //com.mysql.jdbc.JDBC4Connection@76908cc0
    }
    
    4. 应用至工具类
    //创建一个Druid数据库连接池
    private static DataSource source;
    static {
        try {
            Properties properties = new Properties();
            InputStream inputStream = ClassLoader.getSystemClassLoader().getResourceAsStream("druid.properties");
            properties.load(inputStream);
            source = DruidDataSourceFactory.createDataSource(properties);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public static Connection getConnection() throws SQLException {
        return source.getConnection();
    }
    
    展开全文
  • 数据库连接池 

    2009-04-11 20:57:00
    数据库连接池 数据库连接池概述: 数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出。对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标...

    数据库连接池 

     数据库连接池概述:  数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出。对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标。数据库连接池正是针对这个问题提出来的。  数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而再不是重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。  数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中,这些数据库连接的数量是由最小数据库连接数来设定的。无论这些数据库连接是否被使用,连接池都将一直保证至少拥有这么多的连接数量。连接池的最大数据库连接数量限定了这个连接池能占有的最大连接数,当应用程序向连接池请求的连接数超过最大连接数量时,这些请求将被加入到等待队列中。数据库连接池的最小连接数和最大连接数的设置要考虑到下列几个因素:  1) 最小连接数是连接池一直保持的数据库连接,所以如果应用程序对数据库连接的使用量不大,将会有大量的数据库连接资源被浪费;  2) 最大连接数是连接池能申请的最大连接数,如果数据库连接请求超过此数,后面的数据库连接请求将被加入到等待队列中,这会影响之后的数据库操作。  3) 如果最小连接数与最大连接数相差太大,那么最先的连接请求将会获利,之后超过最小连接数量的连接请求等价于建立一个新的数据库连接。不过,这些大于最小连接数的数据库连接在使用完不会马上被释放,它将被放到连接池中等待重复使用或是空闲超时后被释放。

     

    Tomcat6.0连接池配置
      1.配置tomcat下的conf下的context.xml文件,在之间添加连接池配置:
    <Resource name="jdbc/sample"
    auth="Container"
    type="javax.sql.DataSource"
    driverClassName="com.microsoft.sqlserver.jdbc.SqlserverDriver"
    url="jdbc:sqlserver://localhost:8080;databaseName=test"
    username="sa"
    password="sa"
    maxActive="100"
    maxIdle="30"
    maxWait="10000" />

    2.配置你的应用程序下的web.xml中的之间加入:
     <resource-ref>
    <description>DB Connection</description>
    <res-ref-name>jdbc/sample</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
     <res-auth>Container</res-auth>
     </resource-ref>

    3.把连接数据库的第三方驱动放到common/lib下面就ok了
    4.测试程序(关键代码)
    Context ctx = new InitialContext();
    DataSource ds = (DataSource)ctx.lookup("jdbc/sample");
    Connection con = ds.getConnection();
    以下和JDBC操作代码相同。。。。。。。。

    展开全文

空空如也

1 2 3 4 5 ... 20
收藏数 35,240
精华内容 14,096
关键字:

数据库连接池