JDBC连接池C3P0

连接池

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"?>
<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连接池

//測试连接池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连接池详细參数说明例如以下:

c3p0-config>

<propertyname=“acquireIncrement”>3

30

1000

<propertyname=“autoCommitOnClose”>false

<propertyname=“automaticTestTable”>Test

false

100

<propertyname=“connectionTesterClassName”>

<propertyname=“factoryClassLocation”>null

<propertyname=“forceIgnoreUnresolvedTransactions”>false

60

3

<propertyname=“maxIdleTime”>60

15

100

<propertyname=“maxStatementsPerConnection”>

3

<propertyname=“overrideDefaultUser”>root

password

<propertyname=“preferredTestQuery”>select id from test whereid=1

300

<propertyname=“testConnectionOnCheckout”>false

<propertyname=“testConnectionOnCheckin”>true

<propertyname=“user”>root

<propertyname=“usesTraditionalReflectiveProxies”>false

<property name="automaticTestTable">con_test</property>
<propertyname="checkoutTimeout">30000</property>
<propertyname="idleConnectionTestPeriod">30</property>
<propertyname="initialPoolSize">10</property>
<propertyname="maxIdleTime">30</property>
<propertyname="maxPoolSize">25</property>
<propertyname="minPoolSize">10</property>
<propertyname="maxStatements">0</property>

<user-overrides user="swaldman">
</user-overrides>

https://www.cnblogs.com/zhchoutai/p/7080991.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值