- 浏览: 73908 次
- 性别:
- 来自: 北京
最新评论
-
TopLongMan:
...
weblogic与websphere的区别———转 -
wendellup_account1:
thanks.
tomcat 只输ip或localhost就可以直接访问项目的步骤 -
kittychina:
不要把程序员的低薪归结为程序员自己不努力!虽然我们都提倡要努力 ...
程序员前途
C3PO数据库连接池
优点:性能比较dbcp好,稳定性也比dbcp强
将C3po跟spring整合
1.导入c3p0-0.9.1.2.jar,commons-logging-1.1.1.jar,spring-2.5.6.jar
2.在applicationContext.xml中配置,用C3PO配置好的数据源
<bean
id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass">
<value>net.sourceforge.jtds.jdbc.Driver</value>
</property>
<property name="jdbcUrl">
<value>jdbc:jtds:sqlserver://localhost:1433/hua</value>
</property>
<property name="user">
<value>sa</value>
</property>
<property name="password">
<value>hua</value>
</property>
<property name="minPoolSize">
<value>15</value>
</property>
<property name="acquireIncrement">
<value>5</value>
</property>
<property name="maxPoolSize">
<value>25</value>
</property>
</bean>
3.在dao类中就可以通过
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
DataSource ds=(DataSource)context.getBean("dataSource");
Connection conn=ds.getConnection();
Statement stmt=conn.creatStatement();
ResultSet rs=stmt.executeQuery(sql);
接着介绍一下C3PO的参数
<!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 -->
<property name="acquireIncrement">3</property>
<!--定义在从数据库获取新连接失败后重复尝试的次数。Default: 30 -->
<property name="acquireRetryAttempts">30</property>
<!--两次连接中间隔时间,单位毫秒。Default: 1000 -->
<property name="acquireRetryDelay">1000</property>
<!--连接关闭时默认将所有未提交的操作回滚。Default: false -->
<property name="autoCommitOnClose">false</property>
<!--c3p0将建一张名为Test的空表,并使用其自带的查询语句进行测试。如果定义了这个参数那么
属性preferredTestQuery将被忽略。你不能在这张Test表上进行任何操作,它将只供c3p0测试
使用。Default: null-->
<property name="automaticTestTable">Test</property>
<!--获取连接失败将会引起所有等待连接池来获取连接的线程抛出异常。但是数据源仍有效
保留,并在下次调用getConnection()的时候继续尝试获取连接。如果设为true,那么在尝试
获取连接失败后该数据源将申明已断开并永久关闭。Default: false-->
<property name="breakAfterAcquireFailure">false</property>
<!--当连接池用完时客户端调用getConnection()后等待获取新连接的时间,超时后将抛出
SQLException,如设为0则无限期等待。单位毫秒。Default: 0 -->
<property name="checkoutTimeout">100</property>
<!--通过实现ConnectionTester或QueryConnectionTester的类来测试连接。类名需制定全路径。
Default: com.mchange.v2.c3p0.impl.DefaultConnectionTester-->
<property name="connectionTesterClassName"></property>
<!--指定c3p0 libraries的路径,如果(通常都是这样)在本地即可获得那么无需设置,默认null即可
Default: null-->
<property name="factoryClassLocation">null</property>
<!--Strongly disrecommended. Setting this to true may lead to subtle and bizarre bugs.
(文档原文)作者强烈建议不使用的一个属性-->
<property name="forceIgnoreUnresolvedTransactions">false</property>
<!--每60秒检查所有连接池中的空闲连接。Default: 0 -->
<property name="idleConnectionTestPeriod">60</property>
<!--初始化时获取三个连接,取值应在minPoolSize与maxPoolSize之间。Default: 3 -->
<property name="initialPoolSize">3</property>
<!--最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 -->
<property name="maxIdleTime">60</property>
<!--连接池中保留的最大连接数。Default: 15 -->
<property name="maxPoolSize">15</property>
<!--JDBC的标准参数,用以控制数据源内加载的PreparedStatements数量。但由于预缓存的statements
属于单个connection而不是整个连接池。所以设置这个参数需要考虑到多方面的因素。
如果maxStatements与maxStatementsPerConnection均为0,则缓存被关闭。Default: 0-->
<property name="maxStatements">100</property>
<!--maxStatementsPerConnection定义了连接池内单个连接所拥有的最大缓存statements数。Default: 0 -->
<property name="maxStatementsPerConnection"></property>
<!--c3p0是异步操作的,缓慢的JDBC操作通过帮助进程完成。扩展这些操作可以有效的提升性能
通过多线程实现多个操作同时被执行。Default: 3-->
<property name="numHelperThreads">3</property>
<!--当用户调用getConnection()时使root用户成为去获取连接的用户。主要用于连接池连接非c3p0
的数据源时。Default: null-->
<property name="overrideDefaultUser">root</property>
<!--与overrideDefaultUser参数对应使用的一个参数。Default: null-->
<property name="overrideDefaultPassword">password</property>
<!--密码。Default: null-->
<property name="password"></property>
<!--定义所有连接测试都执行的测试语句。在使用连接测试的情况下这个一显著提高测试速度。注意:
测试的表必须在初始数据源的时候就存在。Default: null-->
<property name="preferredTestQuery">select id from test where id=1</property>
<!--用户修改系统配置参数执行前最多等待300秒。Default: 300 -->
<property name="propertyCycle">300</property>
<!--因性能消耗大请只在需要的时候使用它。如果设为true那么在每个connection提交的
时候都将校验其有效性。建议使用idleConnectionTestPeriod或automaticTestTable
等方法来提升连接测试的性能。Default: false -->
<property name="testConnectionOnCheckout">false</property>
<!--如果设为true那么在取得连接的同时将校验连接的有效性。Default: false -->
<property name="testConnectionOnCheckin">true</property>
<!--用户名。Default: null-->
<property name="user">root</property>
<!--早期的c3p0版本对JDBC接口采用动态反射代理。在早期版本用途广泛的情况下这个参数
允许用户恢复到动态反射代理以解决不稳定的故障。最新的非反射代理更快并且已经开始
广泛的被使用,所以这个参数未必有用。现在原先的动态反射与新的非反射代理同时受到
支持,但今后可能的版本可能不支持动态反射代理。Default: false-->
DBCP数据连接池
1.导入commons-dbcp.jar,commons-logging-1.1.1.jar,commons-pool.jar,spring-2.5.6.jar
2.在applicationContext.xml中配置数据源
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName"> <value>com.mysql.jdbc.Driver</value>
</property>
<property name="url"> <value>jdbc:mysql://localhost:3306/dbname?useUnicode=true&characterEncoding=utf8</value>
</property>
<property name="username"> <value>root</value> </property>
<property name="password"> <value>root</value> </property>
<property name="initialSize"> <value>3</value> </property>
<property name="maxActive"> <value>100</value> </property>
<property name="maxIdle"> <value>5</value> </property>
<property name="maxWait"> <value>10</value> </property>
</bean>
3.跟上面一样获取数据源
4.参数介绍
Ø BasicDataSource 相关的参数说明
dataSource: 要连接的 datasource (通常我们不会定义在 server.xml)
defaultAutoCommit: 对于事务是否 autoCommit, 默认值为 true
defaultReadOnly: 对于数据库是否只能读取, 默认值为 false
driverClassName:连接数据库所用的 JDBC Driver Class,
maxActive: 可以从对象池中取出的对象最大个数,为0则表示没有限制,默认为8
maxIdle: 最大等待连接中的数量,设 0 为没有限制 (对象池中对象最大个数)
minIdle:对象池中对象最小个数
maxWait: 最大等待秒数, 单位为 ms, 超过时间会丟出错误信息
password: 登陆数据库所用的密码
url: 连接数据库的 URL
username: 登陆数据库所用的帐号
validationQuery: 验证连接是否成功, SQL SELECT 指令至少要返回一行
removeAbandoned: 是否自我中断, 默认是 false
removeAbandonedTimeout: 几秒后会自我中断, removeAbandoned 必须为 true
logAbandoned: 是否记录中断事件, 默认为 false
minEvictableIdleTimeMillis:大于0 ,进行连接空闲时间判断,或为0,对空闲的连接不进行验证;默认30分钟
timeBetweenEvictionRunsMillis:失效检查线程运行时间间隔,如果小于等于0,不会启动检查线程,默认-1
testOnBorrow:取得对象时是否进行验证,检查对象是否有效,默认为false
testOnReturn:返回对象时是否进行验证,检查对象是否有效,默认为false
testWhileIdle:空闲时是否进行验证,检查对象是否有效,默认为false
Ø 在使用DBCP的时候,如果使用默认值,则数据库连接因为某种原因断掉后,再从连接池中取得连接又不进行验证,这时取得的连接实际上就会是无效的数据库连接。因此为了防止获得的数据库连接失效,在使用的时候最好保证:
username: 登陆数据库所用的帐号
validationQuery:SELECT COUNT(*) FROM DUAL
testOnBorrow、testOnReturn、testWhileIdle:最好都设为true
minEvictableIdleTimeMillis:大于0 ,进行连接空闲时间判断,或为0,对空闲的连接不进行验证
timeBetweenEvictionRunsMillis:失效检查线程运行时间间隔,如果小于等于0,不会启动检查线程
Ø PS:在构造GenericObjectPool [BasicDataSource在其createDataSource () 方法中也会使用GenericObjectPool] 时,会生成一个内嵌类Evictor,实现自Runnable接口。如果timeBetweenEvictionRunsMillis大于0,每过timeBetweenEvictionRunsMillis毫秒Evictor会调用evict()方法,检查对象的闲置时间是否大于 minEvictableIdleTimeMillis毫秒(_minEvictableIdleTimeMillis小于等于0时则忽略,默认为30分钟),是则销毁此对象,否则就激活并校验对象,然后调用ensureMinIdle方法检查确保池中对象个数不小于_minIdle。在调用returnObject方法把对象放回对象池,首先检查该对象是否有效,然后调用PoolableObjectFactory 的passivateObject方法使对象处于非活动状态。再检查对象池中对象个数是否小于maxIdle,是则可以把此对象放回对象池,否则销毁此对象
上面两个是基于Apache的开源连接池框架,如果你用的服务器也是Apache的,如:tomcat。建议使用
bonecp数据连接池
1.导入bonecp-0.7.0.jar,commons-logging-1.1.1.jar,google-collections-1.0.jar,log4j-1.2.15.jar,slf4j-api-1.6.0.jar,slf4j-log4j12-1.6.0.jar,spring-2.5.6.jar
2.在applicationContext.xml中配置数据源
<bean id="mainDataSource" class="com.jolbox.bonecp.BoneCPDataSource" destroy-method="close">
<property name="driverClass" value="http://www.cnblogs.com/lfpzln/archive/2011/12/21/com.mysql.jdbc.Driver" />
<property name="jdbcUrl" value="http://www.cnblogs.com/lfpzln/archive/2011/12/21/jdbc:mysql://127.0.0.1/yourdb" />
<property name="username" value="http://www.cnblogs.com/lfpzln/archive/2011/12/21/root"/>
<property name="password" value="http://www.cnblogs.com/lfpzln/archive/2011/12/21/abcdefgh"/>
<property name="idleConnectionTestPeriod" value="http://www.cnblogs.com/lfpzln/archive/2011/12/21/60"/>
<property name="idleMaxAge" value="http://www.cnblogs.com/lfpzln/archive/2011/12/21/240"/>
<property name="maxConnectionsPerPartition" value="http://www.cnblogs.com/lfpzln/archive/2011/12/21/30"/>
<property name="minConnectionsPerPartition" value="http://www.cnblogs.com/lfpzln/archive/2011/12/21/10"/>
<property name="partitionCount" value="http://www.cnblogs.com/lfpzln/archive/2011/12/21/3"/>
<property name="acquireIncrement" value="http://www.cnblogs.com/lfpzln/archive/2011/12/21/5"/>
<property name="statementsCacheSize" value="http://www.cnblogs.com/lfpzln/archive/2011/12/21/100"/>
<property name="releaseHelperThreads" value="http://www.cnblogs.com/lfpzln/archive/2011/12/21/3"/>
</bean>
3.跟上面一样获取数据源
4.
BoneCP最大的特点就是效率,BoneCP号称是目前市面上最快的Java连接池,从官方的评测来看其效率远远超越了其它同类的Java连 接池产品
高度可扩展, 快速的连接池.
注:1)不用synchronized 关键字来处理多线程对资源的争用,而是使用 java.util.concurrent 包中的锁机制;
2)首次使用分区机制来分开管理数据库连接;或许还有其他原因。
Callback (hook interceptor) mechanisms on a change of connection state.
利用分区技术提高性能>
允许直接访问一个连接或者语句
智能调整连接池大小
SQL语句缓存支持
支持异步获取数据库连接 (通过返回Future<Connection>的形式
通过释放连接助理进程来释放数据库连接,提高性能.
通过initSQL参数在每次获取连接的时候执行SQL
支持数据库热切换
自动重试失败的数据库操作(当数据库或者网络挂掉的时候)
JMX support
延迟初始化能力(Lazy initialization capable)
自动检测连接可用性 (keep-alives 等)
允许直接通过数据源而不是通过驱动来获取一个新的数据库连接(Allow obtaining of new connections via a datasource rather than via a Driver)
Datasource/Hibernate support capable
Debug支持准确地高亮那些已经得到但是还没有关闭的链接(Debugging hooks to highlight the exact place where a connection was obtained but not closed)
Debug支持展示那些被关闭两次的链接地址堆栈信息(Debugging support to show stack locations of connections that were closed twice. )
支持自定义连接池名称.
干净的代码结构,TestCase代码覆盖率达到100% (over 125 JUnit tests).
免费的,开源的而且都是用java干的,最重要的是有很完整的javadocs支持。(Free, open source and written in 100% pure Java with complete Javadocs).
性能测试报告 可以看看这个http://www.oschina.net/p/bonecp
Proxool数据连接池
1.导入commons-logging.jar,proxool-0.9.0RC3.jar,spring-2.5.6.jar
2.在Spring的"applicationContext.xml"中的dataSource bean定义——
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<value>org.logicalcobwebs.proxool.ProxoolDriver</value>
</property>
<property name="url">
<value>proxool.Pool_dbname</value>
</property>
</bean>
3.在"web.xml"先配置好Proxool连接池
<servlet>
<servlet-name>proxoolServletConfigurator</servlet-name>
<servlet-class>
org.logicalcobwebs.proxool.configuration.ServletConfigurator
</servlet-class>
<init-param>
<param-name>xmlFile</param-name>
<param-value>WEB-INF/proxool.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
4.写一个proxool.xml
<?xml version="1.0" encoding="UTF-8"?>
<proxool-config>
<proxool>
<alias>Pool_dbname</alias>
<driver-url>jdbc:mysql://localhost:3306/dbname</driver-url>
<driver-class>com.mysql.jdbc.Driver</driver-class>
<driver-properties>
<property name="user" value="yourname"/>
<property name="password" value="yourpass"/>
</driver-properties>
<house-keeping-sleep-time>60000</house-keeping-sleep-time>
<maximum-connection-count>20</maximum-connection-count>
<minimum-connection-count>2</minimum-connection-count>
<prototype-count>0</prototype-count>
<simultaneous-build-throttle>20</simultaneous-build-throttle>
<house-keeping-test-sql>select CURRENT_DATE</house-keeping-test-sql>
<statistics>15s,10m,1d</statistics>
<statistics-log-level>INFO</statistics-log-level>
</proxool>
<proxool>
<!--可以配置多个库-->
</proxool>
</proxool-config>
5.最后跟上面一获取数据源
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
DataSource ds=(DataSource)context.getBean("dataSource");
Connection conn=ds.getConnection();
Statement stmt=conn.creatStatement();
ResultSet rs=stmt.executeQuery(sql);
6.参数介绍
#alias是别名;
#driver-url是驱动的url,就是连接的url;
#driver-class是驱动的类,就是数据库驱动;
#user和password是设置登陆数据库的用户名和密码
#prototype-count 最少保持的空闲连接数
#maximum-connection-lifetime 最大连接生命周期 默认值:4小时
#maximum-active-time: 最大活动时间 默认值:5分钟
#maximum-connection-count 最大连接数 默认值:15个
#minimum-connection-count 最小连接数 默认值:5个
#house-keeping-sleep-time proxool自动侦察各个连接状态的时间间隔(毫秒),侦察到空闲的连接就马上回收,超时的销毁
#maximum-new-connections 指因未有空闲连接可以分配而在队列中等候的最大请求数,超过这个请求数的用户连接就不会被接受
优点:性能比较dbcp好,稳定性也比dbcp强
将C3po跟spring整合
1.导入c3p0-0.9.1.2.jar,commons-logging-1.1.1.jar,spring-2.5.6.jar
2.在applicationContext.xml中配置,用C3PO配置好的数据源
<bean
id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass">
<value>net.sourceforge.jtds.jdbc.Driver</value>
</property>
<property name="jdbcUrl">
<value>jdbc:jtds:sqlserver://localhost:1433/hua</value>
</property>
<property name="user">
<value>sa</value>
</property>
<property name="password">
<value>hua</value>
</property>
<property name="minPoolSize">
<value>15</value>
</property>
<property name="acquireIncrement">
<value>5</value>
</property>
<property name="maxPoolSize">
<value>25</value>
</property>
</bean>
3.在dao类中就可以通过
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
DataSource ds=(DataSource)context.getBean("dataSource");
Connection conn=ds.getConnection();
Statement stmt=conn.creatStatement();
ResultSet rs=stmt.executeQuery(sql);
接着介绍一下C3PO的参数
<!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 -->
<property name="acquireIncrement">3</property>
<!--定义在从数据库获取新连接失败后重复尝试的次数。Default: 30 -->
<property name="acquireRetryAttempts">30</property>
<!--两次连接中间隔时间,单位毫秒。Default: 1000 -->
<property name="acquireRetryDelay">1000</property>
<!--连接关闭时默认将所有未提交的操作回滚。Default: false -->
<property name="autoCommitOnClose">false</property>
<!--c3p0将建一张名为Test的空表,并使用其自带的查询语句进行测试。如果定义了这个参数那么
属性preferredTestQuery将被忽略。你不能在这张Test表上进行任何操作,它将只供c3p0测试
使用。Default: null-->
<property name="automaticTestTable">Test</property>
<!--获取连接失败将会引起所有等待连接池来获取连接的线程抛出异常。但是数据源仍有效
保留,并在下次调用getConnection()的时候继续尝试获取连接。如果设为true,那么在尝试
获取连接失败后该数据源将申明已断开并永久关闭。Default: false-->
<property name="breakAfterAcquireFailure">false</property>
<!--当连接池用完时客户端调用getConnection()后等待获取新连接的时间,超时后将抛出
SQLException,如设为0则无限期等待。单位毫秒。Default: 0 -->
<property name="checkoutTimeout">100</property>
<!--通过实现ConnectionTester或QueryConnectionTester的类来测试连接。类名需制定全路径。
Default: com.mchange.v2.c3p0.impl.DefaultConnectionTester-->
<property name="connectionTesterClassName"></property>
<!--指定c3p0 libraries的路径,如果(通常都是这样)在本地即可获得那么无需设置,默认null即可
Default: null-->
<property name="factoryClassLocation">null</property>
<!--Strongly disrecommended. Setting this to true may lead to subtle and bizarre bugs.
(文档原文)作者强烈建议不使用的一个属性-->
<property name="forceIgnoreUnresolvedTransactions">false</property>
<!--每60秒检查所有连接池中的空闲连接。Default: 0 -->
<property name="idleConnectionTestPeriod">60</property>
<!--初始化时获取三个连接,取值应在minPoolSize与maxPoolSize之间。Default: 3 -->
<property name="initialPoolSize">3</property>
<!--最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 -->
<property name="maxIdleTime">60</property>
<!--连接池中保留的最大连接数。Default: 15 -->
<property name="maxPoolSize">15</property>
<!--JDBC的标准参数,用以控制数据源内加载的PreparedStatements数量。但由于预缓存的statements
属于单个connection而不是整个连接池。所以设置这个参数需要考虑到多方面的因素。
如果maxStatements与maxStatementsPerConnection均为0,则缓存被关闭。Default: 0-->
<property name="maxStatements">100</property>
<!--maxStatementsPerConnection定义了连接池内单个连接所拥有的最大缓存statements数。Default: 0 -->
<property name="maxStatementsPerConnection"></property>
<!--c3p0是异步操作的,缓慢的JDBC操作通过帮助进程完成。扩展这些操作可以有效的提升性能
通过多线程实现多个操作同时被执行。Default: 3-->
<property name="numHelperThreads">3</property>
<!--当用户调用getConnection()时使root用户成为去获取连接的用户。主要用于连接池连接非c3p0
的数据源时。Default: null-->
<property name="overrideDefaultUser">root</property>
<!--与overrideDefaultUser参数对应使用的一个参数。Default: null-->
<property name="overrideDefaultPassword">password</property>
<!--密码。Default: null-->
<property name="password"></property>
<!--定义所有连接测试都执行的测试语句。在使用连接测试的情况下这个一显著提高测试速度。注意:
测试的表必须在初始数据源的时候就存在。Default: null-->
<property name="preferredTestQuery">select id from test where id=1</property>
<!--用户修改系统配置参数执行前最多等待300秒。Default: 300 -->
<property name="propertyCycle">300</property>
<!--因性能消耗大请只在需要的时候使用它。如果设为true那么在每个connection提交的
时候都将校验其有效性。建议使用idleConnectionTestPeriod或automaticTestTable
等方法来提升连接测试的性能。Default: false -->
<property name="testConnectionOnCheckout">false</property>
<!--如果设为true那么在取得连接的同时将校验连接的有效性。Default: false -->
<property name="testConnectionOnCheckin">true</property>
<!--用户名。Default: null-->
<property name="user">root</property>
<!--早期的c3p0版本对JDBC接口采用动态反射代理。在早期版本用途广泛的情况下这个参数
允许用户恢复到动态反射代理以解决不稳定的故障。最新的非反射代理更快并且已经开始
广泛的被使用,所以这个参数未必有用。现在原先的动态反射与新的非反射代理同时受到
支持,但今后可能的版本可能不支持动态反射代理。Default: false-->
DBCP数据连接池
1.导入commons-dbcp.jar,commons-logging-1.1.1.jar,commons-pool.jar,spring-2.5.6.jar
2.在applicationContext.xml中配置数据源
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName"> <value>com.mysql.jdbc.Driver</value>
</property>
<property name="url"> <value>jdbc:mysql://localhost:3306/dbname?useUnicode=true&characterEncoding=utf8</value>
</property>
<property name="username"> <value>root</value> </property>
<property name="password"> <value>root</value> </property>
<property name="initialSize"> <value>3</value> </property>
<property name="maxActive"> <value>100</value> </property>
<property name="maxIdle"> <value>5</value> </property>
<property name="maxWait"> <value>10</value> </property>
</bean>
3.跟上面一样获取数据源
4.参数介绍
Ø BasicDataSource 相关的参数说明
dataSource: 要连接的 datasource (通常我们不会定义在 server.xml)
defaultAutoCommit: 对于事务是否 autoCommit, 默认值为 true
defaultReadOnly: 对于数据库是否只能读取, 默认值为 false
driverClassName:连接数据库所用的 JDBC Driver Class,
maxActive: 可以从对象池中取出的对象最大个数,为0则表示没有限制,默认为8
maxIdle: 最大等待连接中的数量,设 0 为没有限制 (对象池中对象最大个数)
minIdle:对象池中对象最小个数
maxWait: 最大等待秒数, 单位为 ms, 超过时间会丟出错误信息
password: 登陆数据库所用的密码
url: 连接数据库的 URL
username: 登陆数据库所用的帐号
validationQuery: 验证连接是否成功, SQL SELECT 指令至少要返回一行
removeAbandoned: 是否自我中断, 默认是 false
removeAbandonedTimeout: 几秒后会自我中断, removeAbandoned 必须为 true
logAbandoned: 是否记录中断事件, 默认为 false
minEvictableIdleTimeMillis:大于0 ,进行连接空闲时间判断,或为0,对空闲的连接不进行验证;默认30分钟
timeBetweenEvictionRunsMillis:失效检查线程运行时间间隔,如果小于等于0,不会启动检查线程,默认-1
testOnBorrow:取得对象时是否进行验证,检查对象是否有效,默认为false
testOnReturn:返回对象时是否进行验证,检查对象是否有效,默认为false
testWhileIdle:空闲时是否进行验证,检查对象是否有效,默认为false
Ø 在使用DBCP的时候,如果使用默认值,则数据库连接因为某种原因断掉后,再从连接池中取得连接又不进行验证,这时取得的连接实际上就会是无效的数据库连接。因此为了防止获得的数据库连接失效,在使用的时候最好保证:
username: 登陆数据库所用的帐号
validationQuery:SELECT COUNT(*) FROM DUAL
testOnBorrow、testOnReturn、testWhileIdle:最好都设为true
minEvictableIdleTimeMillis:大于0 ,进行连接空闲时间判断,或为0,对空闲的连接不进行验证
timeBetweenEvictionRunsMillis:失效检查线程运行时间间隔,如果小于等于0,不会启动检查线程
Ø PS:在构造GenericObjectPool [BasicDataSource在其createDataSource () 方法中也会使用GenericObjectPool] 时,会生成一个内嵌类Evictor,实现自Runnable接口。如果timeBetweenEvictionRunsMillis大于0,每过timeBetweenEvictionRunsMillis毫秒Evictor会调用evict()方法,检查对象的闲置时间是否大于 minEvictableIdleTimeMillis毫秒(_minEvictableIdleTimeMillis小于等于0时则忽略,默认为30分钟),是则销毁此对象,否则就激活并校验对象,然后调用ensureMinIdle方法检查确保池中对象个数不小于_minIdle。在调用returnObject方法把对象放回对象池,首先检查该对象是否有效,然后调用PoolableObjectFactory 的passivateObject方法使对象处于非活动状态。再检查对象池中对象个数是否小于maxIdle,是则可以把此对象放回对象池,否则销毁此对象
上面两个是基于Apache的开源连接池框架,如果你用的服务器也是Apache的,如:tomcat。建议使用
bonecp数据连接池
1.导入bonecp-0.7.0.jar,commons-logging-1.1.1.jar,google-collections-1.0.jar,log4j-1.2.15.jar,slf4j-api-1.6.0.jar,slf4j-log4j12-1.6.0.jar,spring-2.5.6.jar
2.在applicationContext.xml中配置数据源
<bean id="mainDataSource" class="com.jolbox.bonecp.BoneCPDataSource" destroy-method="close">
<property name="driverClass" value="http://www.cnblogs.com/lfpzln/archive/2011/12/21/com.mysql.jdbc.Driver" />
<property name="jdbcUrl" value="http://www.cnblogs.com/lfpzln/archive/2011/12/21/jdbc:mysql://127.0.0.1/yourdb" />
<property name="username" value="http://www.cnblogs.com/lfpzln/archive/2011/12/21/root"/>
<property name="password" value="http://www.cnblogs.com/lfpzln/archive/2011/12/21/abcdefgh"/>
<property name="idleConnectionTestPeriod" value="http://www.cnblogs.com/lfpzln/archive/2011/12/21/60"/>
<property name="idleMaxAge" value="http://www.cnblogs.com/lfpzln/archive/2011/12/21/240"/>
<property name="maxConnectionsPerPartition" value="http://www.cnblogs.com/lfpzln/archive/2011/12/21/30"/>
<property name="minConnectionsPerPartition" value="http://www.cnblogs.com/lfpzln/archive/2011/12/21/10"/>
<property name="partitionCount" value="http://www.cnblogs.com/lfpzln/archive/2011/12/21/3"/>
<property name="acquireIncrement" value="http://www.cnblogs.com/lfpzln/archive/2011/12/21/5"/>
<property name="statementsCacheSize" value="http://www.cnblogs.com/lfpzln/archive/2011/12/21/100"/>
<property name="releaseHelperThreads" value="http://www.cnblogs.com/lfpzln/archive/2011/12/21/3"/>
</bean>
3.跟上面一样获取数据源
4.
BoneCP最大的特点就是效率,BoneCP号称是目前市面上最快的Java连接池,从官方的评测来看其效率远远超越了其它同类的Java连 接池产品
高度可扩展, 快速的连接池.
注:1)不用synchronized 关键字来处理多线程对资源的争用,而是使用 java.util.concurrent 包中的锁机制;
2)首次使用分区机制来分开管理数据库连接;或许还有其他原因。
Callback (hook interceptor) mechanisms on a change of connection state.
利用分区技术提高性能>
允许直接访问一个连接或者语句
智能调整连接池大小
SQL语句缓存支持
支持异步获取数据库连接 (通过返回Future<Connection>的形式
通过释放连接助理进程来释放数据库连接,提高性能.
通过initSQL参数在每次获取连接的时候执行SQL
支持数据库热切换
自动重试失败的数据库操作(当数据库或者网络挂掉的时候)
JMX support
延迟初始化能力(Lazy initialization capable)
自动检测连接可用性 (keep-alives 等)
允许直接通过数据源而不是通过驱动来获取一个新的数据库连接(Allow obtaining of new connections via a datasource rather than via a Driver)
Datasource/Hibernate support capable
Debug支持准确地高亮那些已经得到但是还没有关闭的链接(Debugging hooks to highlight the exact place where a connection was obtained but not closed)
Debug支持展示那些被关闭两次的链接地址堆栈信息(Debugging support to show stack locations of connections that were closed twice. )
支持自定义连接池名称.
干净的代码结构,TestCase代码覆盖率达到100% (over 125 JUnit tests).
免费的,开源的而且都是用java干的,最重要的是有很完整的javadocs支持。(Free, open source and written in 100% pure Java with complete Javadocs).
性能测试报告 可以看看这个http://www.oschina.net/p/bonecp
Proxool数据连接池
1.导入commons-logging.jar,proxool-0.9.0RC3.jar,spring-2.5.6.jar
2.在Spring的"applicationContext.xml"中的dataSource bean定义——
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<value>org.logicalcobwebs.proxool.ProxoolDriver</value>
</property>
<property name="url">
<value>proxool.Pool_dbname</value>
</property>
</bean>
3.在"web.xml"先配置好Proxool连接池
<servlet>
<servlet-name>proxoolServletConfigurator</servlet-name>
<servlet-class>
org.logicalcobwebs.proxool.configuration.ServletConfigurator
</servlet-class>
<init-param>
<param-name>xmlFile</param-name>
<param-value>WEB-INF/proxool.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
4.写一个proxool.xml
<?xml version="1.0" encoding="UTF-8"?>
<proxool-config>
<proxool>
<alias>Pool_dbname</alias>
<driver-url>jdbc:mysql://localhost:3306/dbname</driver-url>
<driver-class>com.mysql.jdbc.Driver</driver-class>
<driver-properties>
<property name="user" value="yourname"/>
<property name="password" value="yourpass"/>
</driver-properties>
<house-keeping-sleep-time>60000</house-keeping-sleep-time>
<maximum-connection-count>20</maximum-connection-count>
<minimum-connection-count>2</minimum-connection-count>
<prototype-count>0</prototype-count>
<simultaneous-build-throttle>20</simultaneous-build-throttle>
<house-keeping-test-sql>select CURRENT_DATE</house-keeping-test-sql>
<statistics>15s,10m,1d</statistics>
<statistics-log-level>INFO</statistics-log-level>
</proxool>
<proxool>
<!--可以配置多个库-->
</proxool>
</proxool-config>
5.最后跟上面一获取数据源
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
DataSource ds=(DataSource)context.getBean("dataSource");
Connection conn=ds.getConnection();
Statement stmt=conn.creatStatement();
ResultSet rs=stmt.executeQuery(sql);
6.参数介绍
#alias是别名;
#driver-url是驱动的url,就是连接的url;
#driver-class是驱动的类,就是数据库驱动;
#user和password是设置登陆数据库的用户名和密码
#prototype-count 最少保持的空闲连接数
#maximum-connection-lifetime 最大连接生命周期 默认值:4小时
#maximum-active-time: 最大活动时间 默认值:5分钟
#maximum-connection-count 最大连接数 默认值:15个
#minimum-connection-count 最小连接数 默认值:5个
#house-keeping-sleep-time proxool自动侦察各个连接状态的时间间隔(毫秒),侦察到空闲的连接就马上回收,超时的销毁
#maximum-new-connections 指因未有空闲连接可以分配而在队列中等候的最大请求数,超过这个请求数的用户连接就不会被接受
发表评论
-
oracle.sql.TIMESTAMP 处理日期 [转]
2013-10-09 13:37 1230个人觉得Oracle有些“独裁”在日期类型对象方面,自己的JD ... -
数据库设计中的14个技巧(转)
2013-02-22 16:29 8391. 原始单据与实体之间 ... -
收缩sql server的数据库日志
2012-09-18 17:36 848--下面的所有库名都指你要处理的数据库的库名 1.清空日志 D ... -
sql server 把txt文件导入数据中时报SQL 网络接口: 服务器不支持所请求的协议 [xFFFFFFFF]
2012-08-17 18:02 11571. sql server 把txt文件导入数据中时报错误 S ... -
SQL Server 存储过程
2012-08-13 10:07 800SQL Server 存储过程 Transa ... -
Statement和PreparedStatement之间的区别
2012-07-17 17:04 7141.PreparedStatement是预编译 ... -
同义词的概念、创建、查看、删除和作用
2012-06-21 16:22 1102在Oracle中对用户的管理 ... -
oracle存储过程的3中循环
2012-05-30 15:35 909create or replace procedure pr_ ... -
Oracle连接错误的解决方法
2012-05-30 10:16 1518Oracle连接相关错误解决方法(一步步检查下去,实践证明,任 ... -
sql 查询时间
2012-05-24 17:12 784例:考试表中有两个字段:startDate、endDate,分 ... -
SQL用逗号等字符隔开的字符串转换成列表
2012-05-22 14:49 1526如何把用逗号等字符隔开的字符串转换成列表,下面依逗号分隔符为例 ... -
oracle函数trunc的使用
2012-05-22 14:47 8201、日期比较时精确到日,可以使用 TRUNC(sysdate, ... -
数据库 for update of 和 for update区别。
2012-05-22 14:46 859对比区别: select * from TTable1 ... -
oracle关于模糊查询的问题
2012-05-22 14:45 750以前模糊查询使用的是:like 例如(Schema KMH_Q ... -
在Oracle中使用rank()over()排名的问题
2012-05-22 14:42 1010排序: ---rank()over(order b ...
相关推荐
本文将详细介绍四个常见的Java数据连接池组件——C3PO、Proxool、DBCP和BoneCP的配置与用法。 首先,我们来看C3PO(Comprehensive3rdPartyPooling),这是一个基于Apache Commons DBCP的数据库连接池实现,具有更好...
【三大连接池参数详解】 ...总结来说,三大连接池——DBCP、C3P0 和 Proxool,各有其特点和配置选项。选择合适的连接池并正确配置这些参数,能够提高数据库操作的效率,减少资源消耗,并确保系统的稳定运行。
DBCP(Apache Commons DBCP)和C3P0是两种常见的开源数据库连接池实现,它们允许开发者有效地管理和重用数据库连接,避免了每次请求数据库时创建新的连接,从而降低了系统的资源消耗。 DBCP,全称为Apache Commons ...
本文将深入探讨数据库连接池的基础知识,特别是关于DBCP(Jakarta Commons DBCP)和C3P0两个流行的连接池实现。 首先,让我们了解什么是数据库连接池。数据库连接池是在应用服务器启动时创建的一组预定义的数据库...
commons-dbcp-1.2.1.jar //连接池的实现 commons-pool.jar //连接池实现的倚赖库 commons-collection.jar //连接池实现的倚赖库 c3po0.902.jar 只要解压dbcppoolcollectionc3po.rar即可
本压缩包文件主要涵盖了两个知名的Java连接池实现:DBCP(Database Connection Pool)和C3P0。 DBCP(Apache Commons DBCP)是Apache软件基金会提供的一个开源的JDBC连接池。它基于Jakarta-pool实现,提供了对JDBC...
"连接池(内含dbcp c3p0)jar包" 提供了两个著名的Java数据库连接池实现:Apache DBCP(Database Connection Pool)和C3P0,这两个库的jar文件被封装在一起,便于开发者快速引入到他们的项目中。 **Apache DBCP** ...
本文主要探讨了三个常用的数据库连接池:DBCP、c3p0和Druid,以及它们的配置说明。 1. **DBCP(Apache Commons DBCP)** DBCP是Apache Commons项目的一部分,它依赖于Apache Commons Pool对象池机制来管理数据库...
#### 二、C3P0连接池的使用方法 ##### 1. 导入所需Jar包 在使用C3P0连接池之前,首先需要将必要的jar包添加到项目中。核心包为`c3p0-0.9.5-pre10.jar`,这是C3P0连接池的主要实现包。此外还需要依赖包`mchange-...
DBCP(Jakarta DBCP)和c3p0是两种常用的开源数据库连接池实现。 DBCP,全称Jakarta Commons DBCP,是Apache软件基金会下的一个项目,它基于Apache的Jakarta POI项目中的DBUtils模块发展而来。DBCP提供了一个可配置...
本文将深入探讨三个常用的数据库连接池:C3P0、DBCP和Proxool,以及如何结合Log4j2进行日志记录。 ### C3P0 C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。C3P0的核心...
下面将详细讲解Proxool连接池的使用方法及其核心概念。 1. **Proxool简介** Proxool是Apache软件基金会的一个开源项目,它提供了一个轻量级的数据库连接池实现。Proxool通过创建一个数据库连接池来管理数据库连接...
### DBCP与C3P0连接池配置详解 #### 一、DBCP与C3P0概述 在Java开发中,数据库连接池是提高应用性能的重要手段之一。通过复用预分配好的数据库连接资源,避免了频繁创建和销毁数据库连接所带来的性能开销。Apache ...
本文将详细介绍几个常见的Java数据库连接池实现:C3P0、Druid、JNDI、DBCP、Proxool以及BoneCP,并结合Spring+MyBatis+maven环境下的应用示例进行解析。 1. C3P0: C3P0是一个开源的JDBC连接池,它实现了数据源和...
本资源包含了DBCP、C3P0和Druid三个主流的Java数据库连接池的资料和对应的jar包,下面将详细介绍这三个连接池及其特点。 1. **DBCP (Database Connection Pool)** DBCP是Apache Commons项目的一部分,它基于...
DBCP(Jakarta DBCP)和C3P0是两种常用的数据库连接池实现,它们在提高应用程序效率、优化数据库资源使用方面起到了重要作用。 **DBCP(Jakarta DBCP)** DBCP是Apache软件基金会的一个项目,全称为Jakarta ...
DBCP和C3P0连接池常用配置参数一览表DBCP和C3P0连接池常用配置参数一览表DBCP和C3P0连接池常用配置参数一览表
数据库连接池是现代应用程序开发中的重要组成部分,它在提高数据库操作效率、节省系统...通过深入理解Proxool的原理和使用方法,不仅可以提升对数据库连接池的理解,也为后续更高效、更复杂的数据库管理打下坚实基础。