关于c3p0连接池连接mysql数据库需要注意的几点

Posted 葬瞳飘血

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于c3p0连接池连接mysql数据库需要注意的几点相关的知识,希望对你有一定的参考价值。

 

什么是数据库连接池:

  用池来管理Connection,这可以重复使用Connection。有了池,所以我们就不用自己来创建Connection,而是通过池来获取Connection对象。

  当使用完Connection后,调用Connection的close()方法也不会真的关闭Connection,而是把Connection“归还”给池。池就可以再利用这个Connection对象了。

导入DBUtils的工具包:commons-dbutils-1.6.jar

commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大简化jdbc编码的工作量,同时也不会影响程序的性能。因此dbutils成为很多不喜欢hibernate的公司的首选。

导入C3P0的工具包:c3p0-0.9.1.2.jar

首先配置c3p0,目前使用最多的是用c3p0-config.xml文件进行配置:

  ①名字必须是c3p0-config.xml。

  ②必须放在src根目录下,切记不要与web.xml放在一起。

此为c3p0配置:

<default-config>为默认配置,还可以增加<named-config name="mysqlConfig">,其中mysqlConfig是你自己的配置名字。

  此时在c3p0工具类中创建 ComboPooledDataSource实例是要加上你的配置名字,即:new ComboPooledDataSource("mysqlConfig")

②  

#initialPoolSize:连接池初始化时创建的连接数,default : 3,取值应在minPoolSize与maxPoolSize之间 c3p0.initialPoolSize=10

  #minPoolSize:连接池保持的最小连接数,default : 3    c3p0.minPoolSize=10

  #maxPoolSize:连接池中拥有的最大连接数,如果获得新连接时会使连接总数超过这个值则不会再获取新连接,而是等待其他连接释放,所以这个值有可能会 设计地很大,default : 15       c3p0.maxPoolSize=50

  #acquireIncrement:连接池在无空闲连接可用时一次性创建的新数据库连接数,default : 3   c3p0.acquireIncrement=5

③ 

driverClass 表示你的数据库驱动类,你用的什么数据库

jdbcUrl   表示你所要连接的数据库,此处automotic_sign为你创建的数据库的名称。

后面的参数 ?useSSl=true 表示是否用SSL连接数据库,此参数不是必须的,mysql版本比较高时,进行连接时会提示该信息。

user和password是 你的数据库的用户名和密码

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
  <default-config>
     <property name="driverClass">com.mysql.jdbc.Driver</property> 
     <property name="jdbcUrl">jdbc:mysql://localhost:3306/automotic_sign?useSSL=true</property> 
     <property name="user">root</property> 
     <property name="password">root</property> 
     <property name="initialPoolSize">5</property> 
     <property name="minPoolSize">2</property>
     <property name="acquireIncrement">3</property>
     <property name="maxPoolSize">10</property> 
  </default-config>

</c3p0-config>

 

创建c3p0工具类与dbutils工具类:

package com.jdbc;



import java.sql.Connection;
import java.sql.SQLException;

import javax.sql.DataSource;

import org.apache.commons.dbutils.QueryRunner;

import com.mchange.v2.c3p0.ComboPooledDataSource;


public class Jdbcutils {
    private static ComboPooledDataSource dataSource;//创建c3p0连接,整个项目有一个连接池就可以了,设为static只要实例化一次
    static {
        dataSource = new ComboPooledDataSource();
    }
    
    public static DataSource getDataSource() {
        return dataSource;
    }
    public static QueryRunner getQueryRunner(){//创建DButils常用工具类QueryRunner的对象
        return new QueryRunner(dataSource);
    }  
    public static Connection getConnection(){
        try {
            Connection connection=dataSource.getConnection();
            return connection;
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            throw new RuntimeException();
        }
    }
    
}

 

以上是关于关于c3p0连接池连接mysql数据库需要注意的几点的主要内容,如果未能解决你的问题,请参考以下文章

使用 c3p0 连接池丢失 MySQL 连接

使用 c3p0 连接数据库

Mysql----JDBC 连接池 DBCP C3P0

使用c3p0与DBCP连接池,造成的MySql 8小时问题解决方式

数据库连接 - 为什么C3P0连接池那么慢

JavaEE基础(06):Servlet整合C3P0数据库连接池