您的位置:首页 > 博客中心 > 数据库 >

JDBC连接池C3P0

时间:2022-03-15 02:43

连接池

   1)传统方式找DriverManager要连接,数目是有限的。 

   2)传统方式的close(),并没有将Connection重用,只是切断应用程序和数据库的桥梁,即无发送到SQL命令到数据库端执行

   3)项目中,对于Connection不说,不会直接使用DriverManager取得,而使用连接池方式。

  4)DBCP和C3P0,都是Java开源的,都必须直接或间接实现javax.sql.DataSource接口

  5)DBCP连接池需要dbcp.properties文件,同时需加入3个对应的jar包

 *6)C3P0连接池需要在/WEB-INF/classes/目录下存放c3p0-config.xml文件,该类ComboPooledDataSource在创建时

     会自动在指定的目录下找xml文件,并加载默认设置

   7)重构JdbcUtil类 

 

DBCP连接池

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

?        commons-dbcp.jar:连接池的实现

?        commons-pool.jar: 连接池实现的依赖类

?        commons-collections.jar :连接池实现的集合类

l      Tomcat 的连接池正是采用该连接池来实现的。

#dbcp.properties 配置文件

driverClassName=com.mysql.jdbc.Driver

url=jdbc:mysql://127.0.0.1:3306/mydb2

username=root

password=root

关键代码

static{

       InputStreamin = JdbcUtil.class.getClassLoader().

                     getResourceAsStream("dbcp.properties");

       Propertiesprop = new Properties();

       prop.load(in);

 

       BasicDataSourceFactoryfactory = new BasicDataSourceFactory();

       dataSource = factory.createDataSource(prop);

}

实例代码:

//测试连接池DBCP的用法

publicclass Demo2 {

    publicstaticvoid main(String[] args) throws Exception {

       long begin = System.currentTimeMillis();

       //加载属性文件

       InputStream is = Demo2.class.getClassLoader().getResourceAsStream("dbcp.properties");

       Properties props = new Properties();

       props.load(is);

       //创建DBCP连接池工厂

       BasicDataSourceFactory factory = new BasicDataSourceFactory();

       //创建数据源,即连接池

       DataSource ds = factory.createDataSource(props);

       for(int i=1;i<=50000;i++){

           //从连接池中取得一个空闲的连接对象

           Connection conn = ds.getConnection();

           if(conn!=null){

              System.out.println(i+":取得连接");

           }

           //将连接对象还回给连接池

           conn.close();

       }

       long end = System.currentTimeMillis();

       System.out.println("共用" + (end-begin)/1000+"秒");

    }

}

c3p0:

配置文件:

<?xml version="1.0"encoding="UTF-8"?>

<!-- 文件名不能乱改,须用默认的c3o0-config.xml -->

<c3p0-config>

    <default-config>

       <property name="driverClass">com.mysql.jdbc.Driver</property>

       <property name="user">root</property>

       <property name="password">root</property>

       <property name="jdbcUrl">jdbc:mysql://127.0.0.1:3306/mydb2</property>

    </default-config>

</c3p0-config>

 

/推荐使用c3p0连接池

//测试连接池C3P0的用法

publicclass Demo3 {

    publicstaticvoid main(String[] args) throws Exception {

       long begin = System.currentTimeMillis();

       //创建C3P0连接池

       ComboPooledDataSource dataSource = new ComboPooledDataSource();

       for(int i=1;i<=100000;i++){

           Connection conn = dataSource.getConnection();

           if(conn!=null){

              System.out.println(i+":取得连接");

              conn.close();

           }

       }

       long end = System.currentTimeMillis();

       System.out.println("共用" + (end-begin)/1000+"秒");

    }

}

 

 

JdbcUtil工具类,封装从c3p0的连接池获取连接:

//JDBC工具类:关闭流和取得连接

publicfinalclass JdbcUtil3 {

    //数据源

    privatestatic ComboPooledDataSource dataSource;

    static{//静态块,读取c3p0默认配置文件

       dataSource = new ComboPooledDataSource();

    }

    //取得连接

    publicstatic Connection getMySqlConnection() throws SQLException{

       return  dataSource.getConnection();

    }

    //关闭连接

    publicstaticvoid close(Connection conn) throws SQLException{

       if(conn!=null){

           conn.close();

       }

    }

}

 

C3P0连接池具体参数说明如下:

  </default-config>
  <named-config name="dumbTestConfig">
    <propertyname="maxStatements">200</property>
    <user-overrides user="poop">
      <propertyname="maxStatements">300</property>
    </user-overrides>
   </named-config>
</c3p0-config>

JDBC连接池C3P0,布布扣,bubuko.com

热门排行

今日推荐

热门手游