- 浏览: 376116 次
- 性别:
- 来自: 合肥
文章分类
- 全部博客 (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 1069转载: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 1002long4j配置 转载:http://www.iteye. ... -
jpa 注解
2011-12-20 09:23 11750转:http://blog.csdn.net/gdweijin ... -
jna
2011-11-29 17:28 1484... -
eclipse设置
2011-11-16 08:45 835转:http://www.iteye.com/topic/11 ... -
深入分析 Java I/O 的工作机制
2011-11-14 08:57 857... -
java获得计算机信息
2011-10-29 13:03 1331采用singar.jar实现,需要将sigar-x86-win ... -
java内存机制
2011-10-24 13:01 1244转. Java内存机制详解 Ja ... -
缓存技术
2011-09-27 13:28 777一个培训的ppt,是介绍缓存知识的。有兴趣的可以参考:缓存技术 ... -
单点登录
2011-09-26 08:37 1559了解单点登录:: 可以使 ... -
继承和组合的关系
2011-08-18 09:17 864个人工作的感触: 首先框架的编写是难度很大,而工具 ... -
导入导出,创建databaselink
2011-08-10 15:56 2094pl/sql导出表结构和表 ... -
小结一下
2011-08-04 10:20 823觉得程序层面上是:数据类型(int long string) ... -
分析建模
2011-07-17 20:13 837系统建模与分析。 -
Java浮点数的精确计算
2011-06-27 16:10 951... -
异常系统
2011-05-31 17:19 675http://www.iteye.com/topic/7217 ... -
权限管理
2011-01-27 09:30 1299... -
jvisualvm
2011-01-11 21:09 865可以查看远程 本地的jvm 有两种方式 jmx jstatd ...
相关推荐
本文将包含以下内容(因为篇幅范围,可根据需要选择阅读): c3p0的使用方法(入门案例, JDNI使用) c3p0的配置参数详解c3p0主要源码分析使用示例-入门需求使用C3P0连接池获取连接对象,对用户数据进行简单的增删改...
C3P0 MyCat Sharding-JDBC Sharding-Sphere 五、操作系统 进程/线程 并发/锁 内存管理和调度 I/O原理 六、设计模式 单例 工厂 代理 策略 模板方法 观察者 适配器 责任链 建造者 七、开发工具 IDEA (0/19) Eclip
分片JDBC-分片数据库和表的JDBC驱动程序 概述 分片JDBC是JDBC的扩展... 支持DBCP,C3P0,BoneCP,Druid。 理论上,任何数据库都支持。 支持MySQL,Oracle,SQLServer和PostgreSQL。 5.配置 Java配置 Spring命名空间 Y
3) servlet、c3p0连接池、MySQL数据库的应用 4) TextRank4Keyword 自然语言处理关键词提取 5) ThreadPool 线程池 6) jsonp 爬虫 7) Mail IMAP协议 8)pdfbox PDF2String 9)poi 生成...
2.4.6 C3P0 10 2.4.7 easyui 10 2.5 系统开发平台及运行环境 11 2.5.1 系统开发平台 11 2.5.2 运行环境 11 第三章 需求分析 12 3.1 系统功能模块概述和分析 12 3.1.1 信息需求分析 12 3.1.2 功能需求分析 13 3.1.3 ...
采用的主要技术栈是: jsp + servlet + Mysql,其中包括 jsp 的三大组件,c3p0 连接池,等技术,运用的开发环境时 Idea9 + Mysql8.0。 ## 二、相关技术: [1、三层架构设计思想]...
java秒杀项目源码 Java高并发秒杀项目源码 项目介绍 此秒杀项目前端使用了Bootstrap、jQuery, 后端主要使用了Spring、SpringMVC、Mybatis, ...c3p0 c3p0 0.9.1.2 org.mybatis mybatis 3.3.0 org.mybatis myba
Java 源码包 Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来...
java基础 一、仓库说明 Java基础类型,容器,并发,IO流,面向对象,Web编程等代码总结。 2、分类文档 JVM虚拟机 JVM特点,结构与执行周期 JVM类加载机制 JVM运行时区数据 JVM执行引擎和垃圾回收...Servlet 集成 C3P0
笔者当初为了学习JAVA,收集了很多经典源码,源码难易程度分为初级、中级、高级等,详情看源码列表,需要的可以直接下载! 这些源码反映了那时那景笔者对未来的盲目,对代码的热情、执着,对IT的憧憬、向往!此时此...
水库大坝安全监测系统、水利平台高保真原型、大坝...Axure原型演示地址:https://www.pmdaniu.com/storages/123992/19b6a90b26ffb8f30e2d8e95e38e9c3b-30328/start.html#g=1&p=%E5%B7%A5%E7%A8%8B%E9%A6%96%E9%A1%B5
8、H5C3基础 第三章 Django 1、Django基本流程走通 2、Django中的模型 3、Django中的视图 4、Django中的模板 5、Django的高级使用 6、Django爱鲜蜂项目第一天 7、Django爱鲜蜂项目第二天 8、Django爱鲜蜂项目第三天...
环境配置(Tomcat与JDK的版本使用问题,DBCP/C3P0数据库连接池的配置问题) 2. 登录(会话)维持————session/cookies 3. 分页显示————PageModel/jdbc-mysql查 ### 实现图 ![主页]...
c3p0连接池 集成开发环境:Idea 2019 web容器:Tomcat 9 需求分析 普通用户: 用户注册:用户进入注册页面,输入相关信息并点击注册,系统将账号信息存入数据库。 用户登录:用户输入用户名和密码,若账号存在则登录...
BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...
BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...
BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...
BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...
BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...