#
# This file is detritus from various testing attempts 
# the values below may change, and often do not represent 
# reasonable values for the parameters. 
#   
c3p0.jdbcUrl=jdbc:oracle:thin:@***.***.1.12:1521:wml
c3p0.driverClass=oracle.jdbc.driver.OracleDriver 
c3p0.user=gpstracert 
c3p0.password=qt_gps   
c3p0.minPoolSize=3 
c3p0.maxPoolSize=20   
#c3p0.testConnectionOnCheckout=true 
#c3p0.testConnectionOnCheckin=true   
#c3p0.checkoutTimeout=2000 
#c3p0.idleConnectionTestPeriod=5 
#c3p0.maxConnectionAge=10 
#c3p0.maxIdleTime=2 
#c3p0.maxIdleTimeExcessConnections=1 
#c3p0.propertyCycle=1 
#c3p0.numHelperThreads=10 
#c3p0.unreturnedConnectionTimeout=15 
#c3p0.debugUnreturnedConnectionStackTraces=true 
#c3p0.maxStatements=30 
#c3p0.maxStatementsPerConnection=5 
#c3p0.maxAdministrativeTaskTime=3 
#c3p0.preferredTestQuery=SELECT 1 
#c3p0.preferredTestQuery=SELECT a FROM emptyyukyuk WHERE a = 5 
#c3p0.preferredTestQuery=SELECT a FROM testpbds WHERE a = 5 
#c3p0.usesTraditionalReflectiveProxies=true 
#c3p0.automaticTestTable=PoopyTestTable 
#c3p0.acquireIncrement=4 
#c3p0.acquireRetryDelay=1000 
#c3p0.acquireRetryAttempts=60 
#c3p0.connectionTesterClassName=com.mchange.v2.c3p0.test.AlwaysFailConnectionTester 
#c3p0.initialPoolSize=10 
com.mchange.v2.log.MLog=com.mchange.v2.log.log4j.Log4jMLog 
#com.mchange.v2.log.MLog=com.mchange.v2.log.jdk14logging.Jdk14MLog 
#com.mchange.v2.log.MLog=com.mchange.v2.log.FallbackMLog 
com.mchange.v2.log.NameTransformer=com.mchange.v2.log.PackageNames 
com.mchange.v2.log.FallbackMLog.DEFAULT_CUTOFF_LEVEL=ALL   
#com.mchange.v2.c3p0.VMID=poop

#com.mchange.v2.log.MLog=com.mchange.v2.log.FallbackMLog com.mchange.v2.log.NameTransformer=com.mchange.v2.log.PackageNames com.mchange.v2.log.FallbackMLog.DEFAULT_CUTOFF_LEVEL=ALL   #com.mchange.v2.c3p0.VMID=poop

java代码
ComboPooledDataSource cpds = new ComboPooledDataSource();
Connection conn = cpds.getConnection();
//业务代码
conn.close();

数据库连接池基础

l 没有连接池的数据库连接方式指通过DriverManager和基本实现DataSource进行连接,但它相关连接的建立以及关闭是非常耗时的.

l 如果使用连接池,将有池来管理相关的数据库连接,减少对数据库连接操作.

l 连接池所做的操作,除了管理连接,还有就是对数据库jdbc api的封装,但jdbc api才是根本,外面做的都是包装,再花哨都是假的。

c3p0统一概念

checkout :从池中取得可用的连接

checkoutconnection:被使用的连接

checkin:把连接放回池中

checkinconnection:没有被使用的连接

所有超时设置,相关的连接,是物理连接的关闭,而不是连接返回池中

管理的是pooledconnection,而不是物理的connection

pooledconnection是sun针对连接池的接口,它本身包含connection,和这个connection相关的所有statement,result,一个checkout的connection所作的所有数据库操作,都被pooledconnection所管理.

statement缓存,主要针对PreparedStatement和CallableStatement,statment缓存主要相对一个connection来说的,不同connection的statment不能通用.

c3p0行为

生成一个connnection

1. 当池中connection没有到达最大数,当有请求出现,将会产生connection.

2. 成生一个pooledconnection

3. 通过pooledconnection.getConnection()得到连接(得到连接是newProxyConnection,不是物理连接)

checkin connection

1. 与pooledconnection脱离关系

2. 关闭与这个connection相关的resultset

3. 关闭所有没有缓冲的statement.

4. checkin所有缓存的statement.

5. 修改pooledconnection相关信息

checkout connection

1. 查看池中是否有没有使用的connection,有就返回

2. 没有,如果没有达到最大数,就生成一个,或者就等待

c3p0常用配置属性
automaticTestTable

automaticTestTable作为测试connection是否有效的表,如果表存在,但有记录,抛出错误,如果表不存在,则建立,并使用SELECT * FROM automaticTestTable 作为连接测试语句

如果automaticTestTable没有设置,而preferredTestQuery设置,则使用preferredTestQuery作为连接测试语句

checkoutTimeout

从池中拿未使用的连接,超时设置,如果没有设置,就不超时.

numConnections

表明池中有多少个连接

numIdleConnections

表明池中有多少个空闲连接,它们可以被checkout

numBusyConnections

表明池中有多少个被checkout的连接,记住:

numIdleConnections + numBusyConnections = numConnections

numUnclosedOrphanedConnections

都是checkoutconnection,但他们已经不再池中管理了.当他们checkin时候,将被destory

connectionCustomizerClassName

hook方法,在对相关资源做操作的时候,''他所操作的connection是真实的数据库连接,而不是proxy过的connection''

maxIdleTime

在checkout一个connection时候,判断这个connection没有被使用的时间是否大于maxIdleTime,来决定是关闭它,还是被checkout

maxConnectionAge

设置一个连接在池中最长的时间,如果时间超过,将会从池中清除

testConnectionOnCheckout

如果设置为true,每次从池中取一个连接,将做一下测试,使用automaticTestTable 或者 preferredTestQuery,做一条查询语句.看看连接好不好用,不好用,就关闭它,重新从池中拿一个.

unreturnedConnectionTimeout

一个checkout连接的超时设置,一旦一个checkout连接超时,他将物理的关闭,而不是返回池中,主要是防止连接被长期使用不释放,这个设置也是比较危险的

idleConnectionTestPeriod

设置在池中的没有被使用的连接,是否定时做测试,看看这个连接还可以用吗?

maxStatements,maxStatementsPerConnection

缓存statement,一个全局的,一个是针对每一个connection,个人觉得效果不是很大,而且也使用了反射机制.

c3p0 jconsole说明

l sampleThreadPoolStackTraces:打印出当前c3p0线程池的情况,默认是3个线程,c3p0很多行为异步,放到线程中做的,比如checkout,checkin,close操作,还有内部池重新整理

l sampleThreadPoolStatus:打印出当前c3p0线程池堆栈

l softResetDefaultUser:关闭所有checkinconnection,重新初始化池

l hardReset:关闭所有checkinconnection和checkoutconnection,池这个对象也不要了,全是新的.

l close:关闭所有跟c3p0相关的东西

源代码分析

生成eclipse项目

l 从sourceforge下载我们目前使用的0.9.1.2版本[http://nchc.dl.sourceforge.net/sourceforge/c3p0/c3p0-0.9.1.2.src.zip 下载]

l ant codegen(因为它有很自动生成代码)

l 导入eclipse(source包括src/classes,build/codegen,缺少juit.jar,log4j.jar,自己解决)

相关概念

首先对datasource的理解,你可以把认为是factory,这样会好理解一点

l PooledDataSource

默认情况情况下,PooledDataSource只管理一个连接池(getConnection()的时候),如果你使用getConnection(username,password),而不是默认的username,
 将会再生产一个连接池针对这个特定的用户,它包含一个ConnectionPoolDataSource实现,连接就是从ConnectionPoolDataSource得到的.

l ConnectionPoolDataSource

包名是javax.sql,一看就知道是sun定制的接口,表现出一个连接池,是PooledConnection的工厂

l PooledConnection

包名是javax.sql,也是sun定制的接口.c3p0默认的实现是NewPooledConnection

l Connection,Statement,Result

操作数据库相关接口,在c3p0中对于NewProxyConnection,NewProxyStatement,NewProxyResultSet,这些东西统一被PooledConnection管理。

c3p0项目情况
c3p0是现在用的最多连接池之一,这么成功的项目却只是一个人开发的。

当目标很明确(连接池要做什么,目标是非常明确的),使用场景很普通的时候,项目能成功,完全求决于程序的架构.

项目在jmx管理和本身死锁监测,做的都比较精彩,但也有它不足支持,jdk1.5提供了很多功能(比如多线程),它很多都是自己实现了,这就要看作者怎么对待这个项目

c3p0 --1的更多相关文章

  1. c3p0连接数据库的3种方式

    c3p0连接数据库的3种方式,这里以mysql为例 1. 直接用set方法设置参数, 基本方法 ComboPooledDataSource dataSource = new ComboPooledDa ...

  2. C3p0连接池配置

    在Java开发中,使用JDBC操作数据库的四个步骤如下:   ①加载数据库驱动程序(Class.forName("数据库驱动类");)   ②连接数据库(Connection co ...

  3. .数据库连接池技术:DBCP和C3P0

    数据库连接池技术:DBCP和C3P0 1.什么是数据库连接池 已知的方法是需要访问数据库的时候进行一次数据库的连接,对数据库操作完之后再释放这个连接,通常这样业务是缺点很明显的: 用户每次请求都需要向 ...

  4. C3P0连接池配置和实现详解

    一.配置 <c3p0-config> <default-config> <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数.Default: 3 --> ...

  5. 数据库连接池c3p0学习

    这里只记录c3p0的数据源,不会涉及到其它方面和别的数据库连接池的对比 配置文件主要的实现方式有三种: 1.手写代码去加载一个配置文件 创建一个config.properties文件如下: drive ...

  6. c3p0 连接池

    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destr ...

  7. oracle 和c3p0 数据库的Time_Wait 过多问题的一个解决方案。

    项目是B/S模式,放在linux服务器上,tomcat和oracle11g在一台服务器上,tomcat读取数据库采用C3P0连接池,一直比较稳定,所以也没有去管.后来把tomcat放在一台win200 ...

  8. spring hibernate4 c3p0连接池配置

    c3p0-0.9.1.2.jar,c3p0-oracle-thin-extras-0.9.1.2.jar,点此下载 <bean id="dataSource" class=& ...

  9. Spring配置c3p0数据源时出错报:java.lang.NoClassDefFoundError: com/mchange/v2/ser/Indirector

    今天在使用Spring配置c3p0数据源时,使用的数据库是mysql,服务器是tomcat,运行时报了一个 java.lang.NoClassDefFoundError: com/mchange/v2 ...

  10. c3p0数据库连接池的使用详解

    首先,什么是c3p0?下面是百度百科的解释: C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展.目前使用它的开源项目有Hibernate,Sp ...

随机推荐

  1. UCOS2_STM32F1移植详细过程(四)

    Ⅰ.概述 上一篇文章是讲述uC/OS-II Ports下面os_cpu_a.asm.os_cpu_c.c和os_cpu.h文件底层端口代码的移植(修改)和说明,接着上一篇文章来讲述关于UCOS移植应用 ...

  2. 第十九章 数据访问(In .net4.5) 之 处理数据

    1. 概述 本章介绍 数据库.Json和Xml.web services 三种介质上的数据操作. 2. 主要内容 2.1 数据库 ① 建立连接 .net平台中的数据连接类都继承自DbConnectio ...

  3. PAT乙级真题1003. 我要通过!(20)(解题)

    “答案正确”是自动判题系统给出的最令人欢喜的回复.本题属于PAT的“答案正确”大派送 —— 只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”. 得到“答案正确”的条件是: 1 ...

  4. Maven:mirror和repository 区别

    1 Repository(仓库) 1.1 Maven仓库主要有2种: remote repository:相当于公共的仓库,大家都能访问到,一般可以用URL的形式访问 local repository ...

  5. 如何快速重置OUTLOOK2013,2016到初始配置状态,outlook 修改数据文件位置

    适用范围: 安装OUTLOOK的机器 知识点分析: 快速清除当前OUTLOOK所有账户,回归到初始配置状态. 操作步骤: WIN+R调出运行 输入: C:\Program Files (x86)\Mi ...

  6. 在meteor中使用支付,以及与服务器进行数据交互

    how to use Meteor.http.call? Meteor.http is only available on sever side http模块仅能用于server端. 1,add ht ...

  7. Linux后门入侵检测

    蛋疼啊,服务器被入侵成肉鸡了,发出大量SYN请求到某个网站!(瞬间有种被OOXX(强)(奸)的赶脚) 泪奔ING... 源起: Linux服务器日常检查,#ps aux 发现大量httpd进程,和往常 ...

  8. (转)redis 学习笔记(1)-编译、启动、停止

    redis 学习笔记(1)-编译.启动.停止   一.下载.编译 redis是以源码方式发行的,先下载源码,然后在linux下编译 1.1 http://www.redis.io/download 先 ...

  9. c# 各种排序算法+找第二大的数+句子单词反转

    冒泡排序 // 冒泡排序 bubble sort public static int[] BubbleSort(int []array) { bool isContinue = true; ; i & ...

  10. 零基础学习Linux(一)环境搭建

    从本文开始我会为大家介绍一下linux环境下详细的集群环境安装.配置.部署到实例演示的整个过程.在此过程中会给大家详细介绍一下Linux的操作技巧和一些工具的使用.今天开始第一步——环境搭建. 第一步 ...