转载: http://www.blogjava.net/fantasyginge/
在项目中尝试使用了几种开源的数据库连接池实现。一种是dbcp,一种是c3p0,还有一种是proxool,这几种数据库连接池都可以很容易的在Spring配置起来。性能总体上上感觉dbcp为最优,因为稳定性和并发性都是我的项目需要的。
项目中经过反复测试,如果web
server和数据库server不是同一个机器的话,在断网时间比较短的时间内三种数据库连接池都能较好的重连,但是在断网时间超过8个钟头proxool就不能恢复工作了。但是dbcp却能很快的重新连接。实际生产环境中稳定性和总体性能是最重要的,都需要做相应的测试才能放心的让系统上生产线。
这里给出项目中数据库连接池配置:
dbcp的jndi:
2 class ="org.springframework.jndi.JndiObjectFactoryBean" >
3 < property name ="jndiName" >
4 < value > java:comp/env/jdbc/mysql </ value >
5 </ property >
6 </ bean >
proxool(proxool-0.9.0RC1)的配置:
class ="org.logicalcobwebs.proxool.ProxoolDataSource"
lazy-init ="false" >
< property name ="driver" >
< value > com.mysql.jdbc.Driver </ value >
</ property >
< property name ="driverUrl" >
< value > jdbc:mysql://ip:3306/dbname?useUnicode=true & characterEncoding=utf8 & autoReconnect=true </ value >
</ property >
< property name ="user" >
< value > user </ value >
</ property >
< property name ="password" >
< value > password </ value >
</ property >
< property name ="maximumConnectionCount" >
< value > 500 </ value >
</ property >
< property name ="houseKeepingSleepTime" >
< value > 15000 </ value >
</ property >
< property name ="houseKeepingTestSql" >
< value > select CURRENT_DATE </ value >
</ property >
< property name ="testBeforeUse" >
< value > true </ value >
</ property >
< property name ="alias" >
< value > mysqlProxoolDataSource </ value >
</ property >
<!--
<property name="maximumActiveTime">
<value>10000</value>
</property>
-->
< property name ="simultaneousBuildThrottle" >
< value > 1000 </ value >
</ property >
< property name ="trace" >
< value > false </ value >
</ property >
</ bean >
建议使用DBCP,配置在tomcat中,然后在spring中使用jndi的形式获取。
c3p0(c3p0-0.9.0):
2 destroy-method ="close" >
3 < property name ="driverClass" >
4 < value > com.mysql.jdbc.Driver </ value >
5 </ property >
6 < property name ="jdbcUrl" >
7 < value > jdbc:mysql://192.168.0.225:3306/sendinmdb?useUnicode=true & characterEncoding=utf8 & autoReconnect=true </ value >
8 </ property >
9 < property name ="user" >
10 < value >******** </ value >
11 </ property >
12 < property name ="password" >
13 < value >******** </ value >
14 </ property >
15 < property name ="maxPoolSize" >
16 < value > 100 </ value >
17 </ property >
18 < property name ="maxIdleTime" >
19 < value > 50 </ value >
20 </ property >
21 < property name ="maxStatementsPerConnection" >
22 < value > 100 </ value >
23 </ property >
24 < property name ="numHelperThreads" >
25 < value > 1000 </ value >
26 </ property >
27 < property name ="idleConnectionTestPeriod" >
28 < value > 30 </ value >
29 </ property >
30 </ bean >
直接copy & paste到spring配置文件里就可以使用了。
配置一些额外的tomcat 的DBCP连接池参数,也可以更好的使用到类似proxool提供的功能,只是dbcp更加稳定而已。
tomcat/conf/context.xml中插入一个Resource元素:
maxActive ="1000" maxIdle ="30" maxWait ="10000"
username ="user" password ="password" driverClassName ="com.mysql.jdbc.Driver"
validationQuery = "select current_date()"
testOnBorrow = "true" testOnReturn = "false" testWhileIdle = "true"
timeBetweenEvictionRunsMillis = "15000" numTestsPerEvictionRun = "10" minEvictableIdleTimeMillis = "600000"
url ="jdbc:mysql://ip:3306/sendinmdb?useUnicode=true&characterEncoding=utf8&autoReconnect=true" />
解释一下以下这些参数的含义:
validationQuery = "select current_date()"
testOnBorrow =
"true"
testOnReturn = "false"
testWhileIdle =
"true"
当从池中获取一个Connection后使用 select current_date()
来测试该数据库连接的可用性,如果SQL语句返回结果则认为是一个有效的连接,否则将继续测试知道可以拿到有效的连接。当返回Connection给池的时候不进行验证,但是Connection空闲的时候就要进行认证。
timeBetweenEvictionRunsMillis
= "15000"
DBCP 清空线程睡眠的间隙,如值为负数则不运行该线程
numTestsPerEvictionRun = "10"
清空线程每次验证的连接对象个数
minEvictableIdleTimeMillis = "600000"
Connection对象可以在池中空闲的最小时间,单位为毫秒
发表评论
-
数据库常识
2011-07-05 14:56 0delete from aa truncate table ... -
Oracle存储过程实例
2010-01-28 22:47 9205create or replace proc ... -
JDBC事务
2010-01-28 22:28 0作者:Jack Shirazi 开发 ... -
Oracle与SQL Server事务处理的比较
2010-01-28 22:03 1475事务处理是所有大型数 ... -
Sqlldr简介
2009-10-21 14:10 1248罗列了网上常见的三篇Sqlldr的介绍 一:sql lo ... -
Oracle中实现行列转换的方法
2009-07-21 22:31 1215student subject grade -------- ... -
oracle 中日期的加减
2009-07-21 22:00 21498加法 select sysdate,add_mo ... -
Oracle 分页
2009-03-26 17:07 0select * from (select rownum ... -
MYSQL的乱码问题
2009-02-17 12:45 804总结了一下几个处理方法 1:改变数据库的默认编码配置,在MYS ... -
Resin和Tomcat的JNDI数据连接池配置
2009-01-17 13:35 4157先说Resin的JNDI数据池连 ... -
tomcat5.0与tomcat5.5的数据库连接池jndi配置区别
2009-01-17 13:35 1713在tomcat5.5版本以前,可以说jndi配置相对是比较复杂 ... -
tomcat5.0连接池配置成功了,池连,JNDI
2009-01-17 13:34 0http://heisetoufa.iteye.com/blo ... -
java连接oracle数据库的各种方法及java在数据库中的含义
2009-01-17 13:34 1215java与oracle的接口: 在数据库中运行JA ... -
开源数据库连接池proxool
2009-01-17 13:32 1697关键词:proxool 连接池 开源 可以根据自己的实际情况, ... -
java实现 excel 中数据导入 oracle
2009-01-17 13:31 2917ORACLE是有一个叫ADI的解决方案 所需的额外包:comm ... -
registerOutParameter Method (SQLServerCallableStat
2009-01-17 13:31 1068registerOutParameter Method (SQ ... -
JDBCTM 指南CallableStatement
2009-01-17 13:31 10527 - CallableStatement 本概述 ... -
OJB查询
2009-01-17 13:27 1520该文档介绍了不同查询 ... -
OJB MySQL 配置
2009-01-17 13:26 10931. repository-database.xml < ... -
深入解析什么是存储过程
2009-01-17 13:26 2210深入解析什么是存储过 ...
相关推荐
1. 优化数据库连接池:根据实际情况合理配置数据库连接池的大小和参数,避免出现连接池溢出和等待的情况。 2. 适当使用索引:合理的索引设计可以大大提高查询速度,例如使用组合索引、避免使用 SELECT \* 等。 3. ...
该框架对应用环境、连接池、 是否为J2EE应用等没有特殊要求。可以和EJB集成,也可与Spring集成,也可以单独使用。整个框架只有两个JAR包,模块和功能都较为轻量。依赖少 整个框架只有三个jar库。间接依赖仅有...
封装了几种使用的数据库,大型关系数据库PeostgreDB,嵌入式NOSQL数据库BerkeleyDB,SQL内存数据库sqlite,NOSQL内存数据库Perst以及多模式数据库 H2,这些数据库是在服务端进行组合使用的,以后会封装使用框架。并且...
BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加...
BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加...
BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加...
BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加...
BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加...
BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加...
BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加...
BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加...
BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加...
BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加...
BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加...
BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加...
1个目标文件,JNDI的使用例子,有源代码,可以下载参考,JNDI的使用,初始化Context,它是连接JNDI树的起始点,查找你要的对象,打印找到的对象,关闭Context…… ftp文件传输 2个目标文件,FTP的目标是:(1)提高...
EJB中JNDI的使用源码例子 1个目标文件,JNDI的使用例子,有源代码,可以下载参考,JNDI的使用,初始化Context,它是连接JNDI树的起始点,查找你要的对象,打印找到的对象,关闭Context…… ftp文件传输 2个目标文件...
BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加...
52.8. 有几种开源的数据库连接池: 29 53. 描述一下JVM加载class文件的原理机制? 30 54. socket编程 30 54.1. 什么是TCP/IP、UDP? 30 54.2. Socket在哪里呢? 31 54.3. Socket是什么呢? 32 54.4. socket的实现步骤...