- 浏览: 390603 次
- 性别:
- 来自: 合肥
-
文章分类
- 全部博客 (314)
- java (132)
- 生活 (13)
- javase模式 (6)
- weblogic (4)
- jquery (5)
- sql (21)
- ecside (1)
- el (3)
- css (5)
- spring (7)
- ireport (2)
- linux (14)
- struts2 (2)
- jstl (1)
- rmi (1)
- rose (9)
- js (6)
- swing (4)
- webservice (1)
- jboss (1)
- ejb3 (2)
- xml (1)
- 线程 (9)
- socket (3)
- jms (2)
- tomcat (10)
- 领域驱动 (3)
- json (3)
- 权限 (2)
- jvm (1)
- 书籍 (1)
- eclipse RCP (0)
- 数据库设计 (10)
- 软件分析建模 (5)
- 分析建模 (3)
- hibernate jpa (5)
- Java 获取系统信息,包括CPU使用率、硬盘大小、网卡状态、系统信息等 (1)
- 项目管理 (2)
- 财务 (0)
- oracle (2)
- 需求 (2)
- rcp gef (0)
- c++ (1)
- hadoop (2)
- BIGDATA (3)
- c (6)
最新评论
-
lh_kevin:
...
jpa 注解 -
一别梦心:
你好,我也遇到此问题了。就你贴的那段代码,你说了两种解决方式, ...
Hibernate的Antlr在Weblogic中产生Jar冲突的历史缘故以及解决办法 -
fireinjava:
...
el表达式 -
宋建勇:
...
JSON: property "xxx" has no getter method in class "..." -
handawei:
有道理,jpa是orm框架的java标准,它关注的是对象到关系 ...
jpa 注解
数据库连接池基础
· 没有连接池的数据库连接方式指通过DriverManager和基本实现DataSource进行连接,但它相关连接的建立以及关闭是非常耗时的.
· 如果使用连接池,将有池来管理相关的数据库连接,减少对数据库连接操作.
· 连接池所做的操作,除了管理连接,还有就是对数据库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
· 当池中connection没有到达最大数,当有请求出现,将会产生connection.
· 成生一个pooledconnection
· 通过pooledconnection.getConnection()得到连接(得到连接是newProxyConnection,不是物理连接)
checkin connection
· 与pooledconnection脱离关系
· 关闭与这个connection相关的resultset
· 关闭所有没有缓冲的statement.
· checkin所有缓存的statement.
· 修改pooledconnection相关信息
checkout connection
· 查看池中是否有没有使用的connection,有就返回
· 没有,如果没有达到最大数,就生成一个,或者就等待
omc中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说明
· sampleThreadPoolStackTraces:打印出当前c3p0线程池的情况,默认是3个线程,c3p0很多行为异步,放到线程中做的,比如checkout,checkin,close操作,还有内部池重新整理
· sampleThreadPoolStatus:打印出当前c3p0线程池堆栈
· softResetDefaultUser:关闭所有checkinconnection,重新初始化池
· hardReset:关闭所有checkinconnection和checkoutconnection,池这个对象也不要了,全是新的.
· close:关闭所有跟c3p0相关的东西
源代码分析
生成eclipse项目
· 从sourceforge下载我们目前使用的0.9.1.2版本 [http://nchc.dl.sourceforge.net/sourceforge/c3p0/c3p0-0.9.1.2.src.zip 下载]
· ant codegen(因为它有很自动生成代码)
· 导入eclipse(source包括src/classes,build/codegen,缺少juit.jar,log4j.jar,自己解决)
相关概念
首先对datasource的理解,你可以把认为是factory,这样会好理解一点
· PooledDataSource
默认情况情况下,PooledDataSource只管理一个连接池(getConnection()的时候),如果你使用getConnection(username,password),而不是默认的username,
将会再生产一个连接池针对这个特定的用户,它包含一个ConnectionPoolDataSource实现,连接就是从ConnectionPoolDataSource得到的.
· ConnectionPoolDataSource
包名是javax.sql,一看就知道是sun定制的接口,表现出一个连接池,是PooledConnection的工厂
· PooledConnection
包名是javax.sql,也是sun定制的接口.c3p0默认的实现是NewPooledConnection
· Connection,Statement,Result
操作数据库相关接口,在c3p0中对于NewProxyConnection,NewProxyStatement,NewProxyResultSet,这些东西统一被PooledConnection管理。
c3p0项目情况
c3p0是现在用的最多连接池之一,这么成功的项目却只是一个人开发的。
当目标很明确(连接池要做什么,目标是非常明确的),使用场景很普通的时候,项目能成功,完全求决于程序的架构.
项目在jmx管理和本身死锁监测,做的都比较精彩,但也有它不足支持,jdk1.5提供了很多功能(比如多线程),它很多都是自己实现了,这就要看作者怎么对待这个项目
目前给我的感觉有点象当年的dom4j感觉,毕竟都需要谋生,创作激情会下降的.
发表评论
-
字符串,Volatile
2013-03-18 12:01 1136转载:http://www.ibm.com/de ... -
qian rushi
2012-12-01 10:13 0唐攀,华清远见高级研 ... -
110道 C语言 题目 超经典中的经典
2012-10-21 08:57 0... -
LOG4J
2012-08-07 10:34 1046long4j配置 转载:http://www.iteye. ... -
jpa 注解
2011-12-20 09:23 11846转:http://blog.csdn.net/gdweijin ... -
jna
2011-11-29 17:28 1549... -
eclipse设置
2011-11-16 08:45 872转:http://www.iteye.com/topic/11 ... -
深入分析 Java I/O 的工作机制
2011-11-14 08:57 900... -
java获得计算机信息
2011-10-29 13:03 1382采用singar.jar实现,需要将sigar-x86-win ... -
java内存机制
2011-10-24 13:01 1295转. Java内存机制详解 Ja ... -
缓存技术
2011-09-27 13:28 825一个培训的ppt,是介绍缓存知识的。有兴趣的可以参考:缓存技术 ... -
单点登录
2011-09-26 08:37 1606了解单点登录:: 可以使 ... -
继承和组合的关系
2011-08-18 09:17 918个人工作的感触: 首先框架的编写是难度很大,而工具 ... -
导入导出,创建databaselink
2011-08-10 15:56 2155pl/sql导出表结构和表 ... -
小结一下
2011-08-04 10:20 892觉得程序层面上是:数据类型(int long string) ... -
分析建模
2011-07-17 20:13 882系统建模与分析。 -
Java浮点数的精确计算
2011-06-27 16:10 1005... -
异常系统
2011-05-31 17:19 728http://www.iteye.com/topic/7217 ... -
权限管理
2011-01-27 09:30 1350... -
jvisualvm
2011-01-11 21:09 934可以查看远程 本地的jvm 有两种方式 jmx jstatd ...
相关推荐
C3P0的源码分析可以帮助开发者深入理解其内部工作机制,包括连接的创建、检测、回收以及异常处理等。源码中的关键类有`ComboPooledDataSource`(数据源)、`PoolableConnectionFactory`(连接工厂)和`...
源码分析有助于理解 c3p0 的内部工作机制,例如: 1. **连接池的创建和管理**:`com.mchange.v2.c3p0.ComboPooledDataSource` 类是连接池的主要入口,负责初始化和管理连接池。 2. **连接的获取与释放**:`...
源码包`c3p0-0.9.5.2.src`提供了c3p0的源代码,使得开发者可以深入理解其内部工作原理,进行定制化开发或调试。 ### c3p0基本概念 1. **数据库连接池**:在应用程序启动时预创建一定数量的数据库连接,并存储在一...
C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定...了解和掌握C3P0的使用和源码分析,对于开发高效稳定的Java Web应用具有重要意义。通过深入研究,我们可以更好地优化数据库连接管理,提升系统的稳定性和性能。
**c3p0详解** c3p0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。在Java的Web应用开发中,数据库连接池是必不可少的部分,它可以有效地管理数据库连接,避免了频繁创建和...
通过源码分析,我们可以了解C3P0在连接获取、释放和空闲连接管理等方面的性能优化策略,如预热连接(pretest connections)以减少首次使用时的延迟,以及连接池的大小调整等。 7. **源码中的核心类** - `...
通过分析源代码,我们可以了解到C3P0是如何实现连接池管理、异常处理、资源回收等功能的,这对于优化数据库性能和排查问题非常有帮助。同时,对于开发者来说,学习C3P0源码也能提升对JDBC和数据库连接池原理的理解。
C3P0是一个开源的Java数据库连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。这个压缩包包含了C3P0的0.9.5.2版本,以及相关的依赖库。下面将详细介绍C3P0的功能、工作原理以及如何使用。 C3P0...
本文件`c3p0-0.9.2.src`包含了C3P0 0.9.2版本的源码,以下是关于C3P0连接池的一些关键知识点: 1. **数据库连接管理**:C3P0通过维护一个数据库连接池来提高应用性能。它预创建并保持一定数量的数据库连接,当应用...
5. **源码分析**:深入源码层面,理解C3P0如何处理数据库连接的创建、分配和释放,以及其与Hibernate的交互过程。 6. **异常处理**:探讨C3P0在遇到数据库连接问题时的错误处理机制,如连接泄漏、超时等问题的排查...
- `c3p0-0.9.5.2-sources.jar`:这个文件包含了C3P0的源代码,对于开发者来说,查看源码可以帮助理解和调试问题。 3. **配置文件**: `c3p0-config.xml`是C3P0的配置文件,定义了连接池的参数和行为。例如,你...
解压后,我们可以看到`play-c3p0-plugin-master`目录,该目录下包含了源码、示例配置以及必要的文档。使用这个插件,开发者只需要将插件添加到项目的依赖中,然后进行简单的配置,即可让Play Framework应用使用C3P0...
3. **连接的健康检查**:分析`validateObject()`方法,了解C3P0如何检查连接的有效性。 4. **连接池的扩展性**:探索`GenericObjectPool`类中的`setMinIdle()`, `setMaxActive()`, `setTimeout()`等方法,理解它们...
在本项目中,"原生servlet+C3P0数据库连接池搭建的商城系统"是一个典型的Java Web应用程序,用于实现在线商城的功能。这个系统利用了Servlet技术作为后端处理核心,结合MySQL数据库存储数据,并通过C3P0连接池管理...
源码分析对于理解这两个组件的工作原理和优化思路至关重要。通过阅读源码,开发者可以了解到它们如何管理数据库连接,如何处理并发问题,以及如何实现各种高级特性。例如,C3P0的`com.mchange.v2.c3p0`包下包含了...
**c3p0连接池详解** c3p0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。c3p0由M EHROTRA开发,它在处理数据库连接方面具有良好的性能和稳定性,广泛应用于各种Java Web应用...
通过分析这些数据,我们可以深入理解C3P0在各种场景下的表现,为系统调优提供依据。 总的来说,C3P0作为一款成熟的JDBC连接池,其性能测试对于提升系统整体性能至关重要。通过科学的测试方法和合理的配置,我们可以...
- **源码分析**:如果需要查看或修改源码,可以解压`c3p0-0.9.1.2.src.zip`,了解其内部实现细节。 - **配置文件**:通常在项目的`WEB-INF/classes`目录下创建`c3p0.properties`或在`applicationContext.xml`等...
《c3p0数据库连接池源码解析与应用实践》 c3p0是一个开源的JDBC连接池,它的版本号0.9.1.2代表着这个特定的源码包。该压缩包“c3p0-0.9.1.2.src.zip”包含了c3p0的源代码,使得开发者可以深入理解其内部机制,学习...
《简易学生信息管理系统:Servlet+DBUtils+c3p0+MySQL技术详解》 在Web开发领域,构建一个学生信息管理系统是常见的实践项目,这有助于学习和掌握关键的技术栈。本项目名为“简易学生信息管理系统”,它利用了Java ...