开发者社区> 谙忆> 正文

MySQL---数据库从入门走向大神系列(十四)-ComboPooledDataSource(C3P0连接池配置)

简介: 需要准备的jar包: MySQL的jar包mysql-connector-java-5.1.39-bin目前是5.1.39版本: http://dev.mysql.com/downloads/connector/j/ C3p0的2个包: https://sourceforge.
+关注继续查看

需要准备的jar包:

MySQL的jar包mysql-connector-java-5.1.39-bin目前是5.1.39版本:
http://dev.mysql.com/downloads/connector/j/

C3p0的2个包:
https://sourceforge.net/projects/c3p0/
c3p0-0.9.1.2.jar和c3p0-sources-0.9.1.2.jar

配置文件:c3p0-config.xml
名字必须为这个!

<c3p0-config>
    <!-- 默认配置,如果没有指定则使用这个配置 -->
    <default-config>
        <property name="driverClass">com.mysql.jdbc.Driver</property>
        <property name="jdbcUrl">
            <![CDATA[jdbc:mysql://127.0.0.1:3306/hncu?useUnicode=true&characterEncoding=UTF-8]]>
        </property>
        <property name="user">root</property>
        <property name="password">1234</property>
        <!-- 初始化池大小 -->
        <property name="initialPoolSize">2</property>
        <!-- 最大空闲时间 -->
        <property name="maxIdleTime">30</property>
        <!-- 最多有多少个连接 -->
        <property name="maxPoolSize">10</property>
        <!-- 最少几个连接 -->
        <property name="minPoolSize">2</property>
        <!-- 每次最多可以执行多少个批处理语句 -->
        <property name="maxStatements">50</property>
    </default-config> 
    <!-- 命名的配置 -->
    <named-config name="demo">
        <property name="driverClass">com.mysql.jdbc.Driver</property>
        <property name="jdbcUrl"><![CDATA[jdbc:mysql://127.0.0.1:3306/hncu?useUnicode=true&characterEncoding=UTF-8]]></property>
        <property name="user">root</property>
        <property name="password">1234</property>
        <property name="acquireIncrement">5</property><!-- 如果池中数据连接不够时一次增长多少个 -->
        <property name="initialPoolSize">100</property>
        <property name="minPoolSize">50</property>
        <property name="maxPoolSize">1000</property>
        <property name="maxStatements">0</property>
        <property name="maxStatementsPerConnection">5</property> <!-- he's important, but there's only one of him -->
    </named-config>
</c3p0-config> 

演示代码:

package cn.hncu.C3p0;

import java.beans.PropertyVetoException;
import java.sql.Connection;
import java.sql.SQLException;

import org.junit.Test;

import com.mchange.v2.c3p0.ComboPooledDataSource;

public class C3p0Demo {

    @Test
    // 纯Java方法使用c3p0
    public void C3p0Demo() throws PropertyVetoException, SQLException {
        ComboPooledDataSource pool = new ComboPooledDataSource();
        pool.setUser("root");// 用户姓名
        pool.setPassword("1234");// 用户密码
        pool.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/hncu?useUnicode=true&characterEncoding=utf-8");// MySQL数据库连接url
        pool.setDriverClass("com.mysql.jdbc.Driver");

        // pool可以调用set方法进行Connection池的配置

        // 连接关闭之后,内存会被释放,下次取时会重新开(内存地址不共用)
        for (int i = 0; i < 20; i++) {
            Connection con = pool.getConnection();
            System.out.println(i + ":" + con);
            if (i % 2 == 0) {
                con.close();
            }
        }
    }

    @Test
    // 演示采用配置文件的方式使用c3p0
    public void C3p0PropertyDemo() throws SQLException {
        ComboPooledDataSource pool = new ComboPooledDataSource();//空参,自动到classpath目录下面加载“c3p0-config.xml”配置文件---配置文件的存储位置和名称必须是这样,且使用“默认配置”
        //ComboPooledDataSource pool = new ComboPooledDataSource("demo");//加载“c3p0-config.xml”文件中定义的“demo”这个配置元素
         for(int i=0;i<25;i++){
               Connection con = pool.getConnection();
               System.out.println(i+":"+ con.hashCode());
           }
    }

}

包装一下C3P0的Connection池

package cn.hncu.C3p0;

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

import javax.sql.DataSource;

import com.mchange.v2.c3p0.ComboPooledDataSource;

public class C3p0Pool {
    //我们的这个包装,只是为了把c3p0池做成让每个线程(客户端)获得的是同一个连接,方便做b/s框架下的事务
    private static DataSource pool;
    private static ThreadLocal<Connection> t = new ThreadLocal<Connection>();
    static{
        pool = new ComboPooledDataSource("demo");
        //这里的参数视你的配置文件而定,也可以不写,用默认的配置
    }

    public static DataSource getDataSource(){
        return pool;
    }

    public static Connection getConnection() throws SQLException{
        Connection con = t.get();
        if(con==null){
            con=pool.getConnection();
            t.set(con);
        }
        return con;
    }
}

转载请附上原文博客链接:
http://blog.csdn.net/qq_26525215

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
MySQL---数据库从入门走向大神系列(六)-事务处理与事务隔离(锁机制)
MySQL 事务处理 简单介绍事务处理: MySQL 事务主要用于处理操作量大,复杂度高的数据。 比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务! 一个事务是一个连续的一组数据库操作,就好像它是一个单一的工作单元进行。
1212 0
MySQL---数据库从入门走向大神系列(四)-子查询、表与表之间的关系
本篇博客讲解(子查询)非相关子查询/相关子查询,一对一,一对多,多对一,多对的的关系! 准备: 首先我们创建一列sex。再为部分行设置好值0(女)或者1(男); delete from stud where age=26; 删除年龄为26的行。
914 0
MySQL---数据库从入门走向大神系列(十二)-构建MVC项目
这个是对前面技术的一个小总结吧,用到的大概技术有: MVC框架,加注解,Struts框架的思想,动态代理,线程管理对象ThreadLocal,Connection对象池,Properties文件读取,EL表达式,JSTL,JavaBean,Java访问MySQL数据库,增删改查… 其实做出来界面挺简单: 完整的项目链接: https://github.
850 0
MySQL---数据库从入门走向大神系列(十一)-Java获取数据库/结果集的元信息、将数据表写入excel表格
数据库的元信息: 首先介绍一下数据库的元信息(元数据): 元数据(Metadata)是关于数据的数据。 元数据是描述数据仓库内数据的结构和建立方法的数据。 存储的数据是什么类型,什么驱动等等,这些描述数据的数据,就是元数据! 准备: package cn.
1376 0
MySQL---数据库从入门走向大神系列(十)-Connection对象池、装饰模式与动态代理模式
问题概述: 之前本系列博客写的,全部都是一个connection对象,不知道大家发现没有,我们既然做了一个Connection工具类,那么大家肯定都是从那里面拿Connection对象的,之前的如果是多线程运行,很容易出问题的,你想想事务处理就知道了,同时用事务处理操作同一个Connection,肯定会出问题的。
906 0
在windows平台下使用vscode当golang开发环境的配置
一、使用的平台与软件: 1、window 7 或者10,注意必须是64位,否则不能使用delve debug 2、go1.11.5.windows-amd64.msi 3、Git-2.20.1-64-bit.exe 4、VSCodeUserSetup-x64-1.31.1.exe 二、安装git,golang,vscode git软件全部使用缺省配置即可,安装完成后也不需要做太多配置; golang一般缺省安装在C:\go下 重点是需要设置GOPATH的环境变量。
2867 0
MySQL---数据库从入门走向大神系列(五)-存储过程
本篇博客讲解: 自动增长列、字段值唯一性约束、存储过程、区分大小写的查询! 自动增长列、字段值唯一性约束 create table aa( id int auto_increment primary key, sname varchar(32) u...
876 0
MySQL---数据库从入门走向大神系列(十七)-JavaWeb分页技术实例演示2
分页,是一种将所有数据分段展示给用户的技术.用户每次看到的不 是全部数据,而是其中的一部分,如果在其中没有找到自己想要的内容,用户可以通过指定页码或是点上/下一页的方式进行翻页。 本例演示静态分页,也就是先设置好每页显示10行,再根据总行数,来算出总页数,并且只显示10个页码。
1177 0
MySQL---数据库从入门走向大神系列(十四)-ComboPooledDataSource(C3P0连接池配置)
需要准备的jar包: MySQL的jar包mysql-connector-java-5.1.39-bin目前是5.1.39版本: http://dev.mysql.com/downloads/connector/j/ C3p0的2个包: https://sourceforge.
1246 0
gdy
Ubuntu16.04 server下配置MySQL,并开启远程连接
背景   最近正在学nodejs,想到曾经有台云服务器,但是很久不用了,由于怕麻烦,一股脑的把云主机重装了个Ubuntu系统,于是配置MySQL成了配置服务中的一个环节(node用不用MySQL不管,主要是闲的重新配置一个-.-),但是配置的过程中,遇到不少问题,所以在解决一系列问题后留篇博备以后使用。
1092 0
+关注
谙忆
GitHub: https://github.com/chenhaoxiang
1455
文章
40
问答
文章排行榜
最热
最新
相关电子书
更多
OceanBase 入门到实战教程
立即下载
阿里云图数据库GDB,加速开启“图智”未来.ppt
立即下载
实时数仓Hologres技术实战一本通2.0版(下)
立即下载