mysql笔记八——开源数据库连接池DBCP和C3P0的使用

DBCP数据库连接池

  • DBCP 是 Apache 软件基金组织下的开源连接池实现,使用DBCP数据源,应用程序应在系统中增加如下两个 jar 文件:

    Commons-dbcp.jar:连接池的实现 Commons-pool.jar:连接池实现的依赖库 Tomcat

    的连接池正是采用该连接池来实现的。该数据库连接池既可以与应用服务器整合使用,也可由应用程序独立使用。

  • 核心代码
static{
    InputStream in = JdbcUtil.class.getClassLoader().
            getResourceAsStream("dbcpconfig.properties");
    Properties prop = new Properties();
    prop.load(in);

    BasicDataSourceFactory factory = new BasicDataSourceFactory();
    dataSource = factory.createDataSource(prop);
}
  • 我的代码示例
package dpcpPoolUse;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;

import javax.sql.DataSource;

import org.apache.commons.dbcp.BasicDataSource;
import org.apache.commons.dbcp.BasicDataSourceFactory;
import org.junit.Test;

public class DbcpPoolDemo {

    @Test
    public void testDbcp() throws SQLException, InterruptedException{
        //      DataSource pool=new BasicDataSource();//不能用DataSource,因为里面没有set。。函数
        BasicDataSource pool=new BasicDataSource();//创建一个池对象
        pool.setDriverClassName("com.mysql.jdbc.Driver");
        pool.setUrl("jdbc:mysql://127.0.0.1:3306/sstud?useUnicode=true&characterEncoding=utf-8");
        pool.setUsername("root");
        pool.setPassword("1234");

        System.out.println(pool.getDefaultCatalog());//获取默认参数
        System.out.println(pool.getInitialSize());//获取连接池初始化大小
        //      System.out.println(pool.getLoginTimeout());//登录限制时间
        System.out.println(pool.getMaxWait());//pool最长等待时间(-1)
        System.out.println(pool.getMaxIdle());////最大空闲时间。如果一个用户获取一个连接,不用,多长时间会被强行收回
        System.out.println(pool.getMaxActive());//pool最多获得数
        System.out.println("__________________");
        //自己设置参数
        //      pool.setMaxWait(1);
        //      pool.setMaxIdle(1);
        pool.setMaxActive(20);
        for(int i=0;i<20;i++){
            //          Thread.sleep(1100);
            Connection con=pool.getConnection();//优先拿到刚刚使用过得
            System.out.println(i+":::::::::::"+con.hashCode());
            //          con.close();
        }
    }
    //通过配置文件  读取
    @Test
    public void testPropertyFile() throws Exception{
        Properties p=new Properties();
        //      p.load(ClassLoader.getSystemClassLoader().getSystemResourceAsStream("dpcp.properities"));//配置文件要放在src(bin)的根目录---classpath的根
        p.load(DbcpPoolDemo.class.getResourceAsStream("dbcp.properities"));//配置文件和当前类的class放在一起
        DataSource pool=BasicDataSourceFactory.createDataSource(p);//DataSource要通过配置文件读取
        //DataSource 不能进行常规设置
        //从它的池中获取连接(8个)
        for(int i=0;i<10;i++){
            Connection con=pool.getConnection();
            System.out.println(i+":::::"+con.hashCode());
            if((i&1)==0){
                con.close();
            }
        }
    }
}
  • 连接池DbcpUtil工具
package dpcpPoolUse;

import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;

import javax.sql.DataSource;

import org.apache.commons.dbcp.BasicDataSourceFactory;

public class DbcpUtil {
    private static DataSource pool=null;
//  static BasicDataSource pool=new BasicDataSource();//创建一个池对象
    private static ThreadLocal<Connection> tl=new ThreadLocal<Connection>();
    static{
        Properties p=new Properties();
        try {
//          pool.setDriverClassName("com.mysql.jdbc.Driver");
//          pool.setUrl("jdbc:mysql://127.0.0.1:3306/sstud?useUnicode=true&characterEncoding=utf-8");
//          pool.setUsername("root");
//          pool.setPassword("1234");
             Class.forName("com.mysql.jdbc.Driver");//需要自己写
            p.load(DbcpPoolDemo.class.getResourceAsStream("dbcp.properities"));//配置文件和当前类的class放在一起
            System.out.println(p);
            pool=BasicDataSourceFactory.createDataSource(p);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    //返回DataSource--池
       public static DataSource getDataSource(){
           return pool;
       }

    public static ThreadLocal<Connection> getTl() {
        return tl;
    }

    public static void setTl(Object object) {
        DbcpUtil.tl = (ThreadLocal<Connection>) object;
    }

    public static Connection getCon(){
        Connection con=tl.get();
        if(con==null){
            try {
                con=pool.getConnection();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            tl.set(con);
        }
        return con;
    }
    public static void main(String[] args) {
        System.out.println(getCon());
    }

}

C3P0数据库连接池

  • C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate,Spring等。
  • 和DPCP的区别:

    1).dbcp没有自动回收空闲连接的功能

    2).c3p0有自动回收空闲连接功能

时间: 2024-11-02 14:30:44

mysql笔记八——开源数据库连接池DBCP和C3P0的使用的相关文章

java常用数据库连接池 (DBCP、c3p0、Druid) 配置说明

1. 引言 1.1 定义 数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出.对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标.数据库连接池正是针对这个问题提出来的. 数据库连接池负责分配.管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个:释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏.这项技术能明显提高对数据库操作的性能. 1.2 参考资料 DBC

常用数据库连接池 (DBCP、c3p0、Druid) 配置说明(转)

1. 引言 1.1 定义 数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出.对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标.数据库连接池正是针对这个问题提出来的. 数据库连接池负责分配.管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个:释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏.这项技术能明显提高对数据库操作的性能. 1.2 参考资料 DBC

常用数据库连接池 (DBCP、c3p0、Druid) 配置说明

1. 引言 1.1 定义 数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出.对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标.数据库连接池正是针对这个问题提出来的. 数据库连接池负责分配.管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个:释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏.这项技术能明显提高对数据库操作的性能. 1.2 参考资料 DBC

数据库连接池DBCP和C3P0的使用

hibernate开发组推荐使用c3p0; spring开发组推荐使用dbcp;hibernate in action推荐使用c3p0; 一. dbcp 在数据库服务器强行关闭连接或数据库服务重启后,无法reconnect 二. dbcp 连接池的创建速度优于c3p0,而c3p0的性能更加稳定 三. mysql8小时问题的解决方式不同: 众所周知,mysql在使用过程中,一个连接在8小时内无任何操作时,该连接会被断开,而连接池中的连接并不会感知该断开操作.dbcp和c3p0给出了不同的解决方案:

数据库连接池 dbcp与c3p0的使用

众所周知,无论现在是B/S或者是C/S应用中,都免不了要和数据库打交道.在与数据库交 互过程中,往往需要大量的连接.对于一个大型应用来说,往往需要应对数以千万级的用户连接请求,如果高效相应用户请求,对应用开发者而言是一个很重要的问题.下面就我所接触到 的解决方法分享给大家.    学过计算机网络的都知道,在一个内部局域网中,大部分用的都是私有地址,要想和外部 打交道,必须要有相应的合法外部地址相对应.然而内部用户数量巨大,一台机子一个外部IP 是不现实的.这样就有了一种叫做连接池的概念.因为不是

3中建立数据库连接池dbcp和c3p0和tomcat数据池

DBCP数据源:需要 •Commons-dbcp.jar:连接池的实现 •Commons-pool.jar:连接池实现的依赖库 dbcpconfig.properties(这个在src同目录下--模板) #连接设置 driverClassName=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/jdbc username=root password= #<!-- 初始化连接 --> initialSize=10 #最大连接数量 max

数据库连接池DBCP和C3P0

直接代码: public class DBCPUtils { private static DBCPUtils dbcputils=null; private BasicDataSource bds=null; private DataSourceConnectionFactory dscf=null; private DBCPUtils(){ if(bds==null) bds=new BasicDataSource(); bds.setUrl(DBConsts.url); bds.setUs

开源框架数据库连接池dbcp的使用方法

package com.mysql.demo; import java.io.InputStream; import java.sql.Connection; import java.sql.SQLException; import java.util.Properties; import javax.sql.DataSource; import org.apache.commons.dbcp.BasicDataSourceFactory; //运用开源数据库连接池DBCP //引用dbcp.j

[数据库连接池] Java数据库连接池--DBCP浅析.

前言对于数据库连接池, 想必大家都已经不再陌生, 这里仅仅设计Java中的两个常用数据库连接池: DBCP和C3P0(后续会更新). 一. 为何要使用数据库连接池假设网站一天有很大的访问量,数据库服务器就需要为每次连接创建一次数据库连接,极大的浪费数据库的资源,并且极易造成数据库服务器内存溢出.拓机.数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现的尤为突出.对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标.数据库连接池正式针对这个问题提