数据库连接池C3P0

阅读更多
一、名字的由来


很多人都用过java的数据库连接池C3P0,但官方没有说明名称的由来。

据传闻:连接池作者是《星球大战》迷,C3P0就是其中的一个机器人,并且这个名称中包涵connection 和pool的单词字母。因此叫这个名字。



C3P0就是下图中的左边的那个机器人。右边是R2D2。



数据库连接池C3P0_第1张图片



观影顺序
一、正传
星球大战:新希望(4)
星球大战:帝国反击战(5)
星球大战:绝地大反攻(6)
二、前传
星战前传:魅影危机(1)
星战前传:克隆人的进攻(2)
星战前传:西斯的复仇(3)
三、后传
星战后传1:原力觉醒(7)
四、外传
星战外传:侠盗一号




二、Spring c3p0连接池配置

数据库连接池
数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。我们可以通过设定连接池最大连接数来防止系统无尽的与数据库连接。

获取一个连接,系统要在背后做很多消耗资源的事情,大多时候,创建连接的时间比执行sql语句的时间还要长。
用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要消耗相对较大的资源,创建时间也较长。

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

c3p0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。c3p0一般是与Hibernate,Spring等框架一块使用的,当然也可以单独使用。

Apache 的 dbcp (Data Base Connection Pool) 没有自动回收空闲连接的功能,而 c3p0 有自动回收空闲连接功能。

第一种方式:通过xml文件了来配置


    
        com.mysql.jdbc.Driver
        jdbc:mysql://localhost:3306/mydb
        root
        
        15
        5
        5
    



第二种方式:通过properties文件来配置
c3p0.jdbcUrl=jdbc:mysql://localhost:3306/mydb
c3p0.driverClass=com.mysql.jdbc.Driver
c3p0.user=root
c3p0.password=
c3p0.maxPoolSize=20
c3p0.minPoolSize=5
c3p0.initialPoolSize=5



下面通过实例来分析一下,用连接池和不用连接池连接数据库时的差别:
package com.maya.c3p0;

import java.sql.Connection;
import java.sql.DriverManager;
import java.util.Calendar;

import com.mchange.v2.c3p0.ComboPooledDataSource;

public class TestC3P0 {
    //原生链接数据库,循环一千次时间8015毫秒
    public static void main1(String[] args) throws Exception{        
        long start = Calendar.getInstance().getTimeInMillis();
        for(int i=0;i<1000;i++){
            Class.forName("com.mysql.jdbc.Driver");
            Connection  conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb","root","");
            System.out.println(conn.isClosed());
            conn.close();
        }
        long end = Calendar.getInstance().getTimeInMillis();
        System.out.println(end-start);
    }
    //通过连接池链接数据库,循环一千次时间1045毫秒
    public static void main(String[] args) throws Exception{        
        long start = Calendar.getInstance().getTimeInMillis();        
        ComboPooledDataSource ds = new ComboPooledDataSource();//不写时默认找
        for (int i = 0; i < 1000; i++) {
            Connection conn = ds.getConnection();
            System.out.println(conn.isClosed());
            conn.close();
        }
        long end = Calendar.getInstance().getTimeInMillis();
        System.out.println(end-start);        
    }
}




接下来我们还可以直接手动配置
public static void main00(String[] args) throws Exception {
        ComboPooledDataSource ds = new ComboPooledDataSource();
        ds.setDriverClass("com.mysql.jdbc.Driver");
        ds.setJdbcUrl("jdbc:mysql://localhost:3306/mydb");
        ds.setUser("root");
        ds.setPassword("");
        ds.setMinPoolSize(5);
        ds.setMaxPoolSize(20);
        
        Connection conn =  ds.getConnection();
        System.out.println(conn.isClosed());
        conn.close();       
    }



使用 JDBCTemplate


        
    
    
        
        
        
        
        
        
        
        
    
    
        
    







三、c3p0-config.xml模板详解

    
        
        
    3    
      
        
    30    
      
        
    1000    
      
        
    false    
      
        
    Test    
      
        
    false    
      
        
    100    
      
        
        
      
        
    null    
      
        
    false    
      
        
    60    
      
        
    3    
      
        
    60    
      
        
    15    
      
        
    100    
      
        
        
      
        
    3    
      
        
    root    
      
        
    password    
      
        
        
      
        
    select id from test where id=1    
      
        
    300    
      
        
    false    
      
        
    true    
      
        
    root    
      
        
    false  
      
    con_test    
    30000    
    30    
    10    
    30    
    25    
    10    
    0    
        
        
        
        
    200    
        
    300    
        
        










-








http://www.cnblogs.com/AnswerTheQuestion/p/6641644.html

-
  • 数据库连接池C3P0_第2张图片
  • 大小: 29.5 KB
  • 查看图片附件

你可能感兴趣的:(数据库连接池,C3P0,名字的由来,全称)