c3po优化详细配置.docx

上传人:b****4 文档编号:3803388 上传时间:2022-11-25 格式:DOCX 页数:12 大小:21.04KB
下载 相关 举报
c3po优化详细配置.docx_第1页
第1页 / 共12页
c3po优化详细配置.docx_第2页
第2页 / 共12页
c3po优化详细配置.docx_第3页
第3页 / 共12页
c3po优化详细配置.docx_第4页
第4页 / 共12页
c3po优化详细配置.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

c3po优化详细配置.docx

《c3po优化详细配置.docx》由会员分享,可在线阅读,更多相关《c3po优化详细配置.docx(12页珍藏版)》请在冰豆网上搜索。

c3po优化详细配置.docx

c3po优化详细配置

c3p0详细配置

官方文档:

--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。

Default:

3-->

3

--定义在从数据库获取新连接失败后重复尝试的次数。

Default:

30-->

30

--两次连接中间隔时间,单位毫秒。

Default:

1000-->

1000

--连接关闭时默认将所有未提交的操作回滚。

Default:

false-->

false

--c3p0将建一张名为Test的空表,并使用其自带的查询语句进行测试。

如果定义了这个参数那么

属性preferredTestQuery将被忽略。

你不能在这张Test表上进行任何操作,它将只供c3p0测试

使用。

Default:

null-->

Test

--获取连接失败将会引起所有等待连接池来获取连接的线程抛出异常。

但是数据源仍有效

保留,并在下次调用getConnection()的时候继续尝试获取连接。

如果设为true,那么在尝试

获取连接失败后该数据源将申明已断开并永久关闭。

Default:

false-->

false

--当连接池用完时客户端调用getConnection()后等待获取新连接的时间,超时后将抛出

SQLException,如设为0则无限期等待。

单位毫秒。

Default:

0-->

100

--通过实现ConnectionTester或QueryConnectionTester的类来测试连接。

类名需制定全路径。

Default:

com.mchange.v2.c3p0.impl.DefaultConnectionTester-->

--指定c3p0libraries的路径,如果(通常都是这样)在本地即可获得那么无需设置,默认null即可

Default:

null-->

null

--Stronglydisrecommended.Settingthistotruemayleadtosubtleandbizarrebugs.

(文档原文)作者强烈建议不使用的一个属性-->

false

--每60秒检查所有连接池中的空闲连接。

Default:

0-->

60

--初始化时获取三个连接,取值应在minPoolSize与maxPoolSize之间。

Default:

3-->

3

--最大空闲时间,60秒内未使用则连接被丢弃。

若为0则永不丢弃。

Default:

0-->

60

--连接池中保留的最大连接数。

Default:

15-->

15

--JDBC的标准参数,用以控制数据源内加载的PreparedStatements数量。

但由于预缓存的statements

属于单个connection而不是整个连接池。

所以设置这个参数需要考虑到多方面的因素。

如果maxStatements与maxStatementsPerConnection均为0,则缓存被关闭。

Default:

0-->

100

--maxStatementsPerConnection定义了连接池内单个连接所拥有的最大缓存statements数。

Default:

0-->

--c3p0是异步操作的,缓慢的JDBC操作通过帮助进程完成。

扩展这些操作可以有效的提升性能

通过多线程实现多个操作同时被执行。

Default:

3-->

3

--当用户调用getConnection()时使root用户成为去获取连接的用户。

主要用于连接池连接非c3p0

的数据源时。

Default:

null-->

root

--与overrideDefaultUser参数对应使用的一个参数。

Default:

null-->

password

--密码。

Default:

null-->

--定义所有连接测试都执行的测试语句。

在使用连接测试的情况下这个一显著提高测试速度。

注意:

测试的表必须在初始数据源的时候就存在。

Default:

null-->

selectidfromtestwhereid=1

--用户修改系统配置参数执行前最多等待300秒。

Default:

300-->

300

--因性能消耗大请只在需要的时候使用它。

如果设为true那么在每个connection提交的

时候都将校验其有效性。

建议使用idleConnectionTestPeriod或automaticTestTable

等方法来提升连接测试的性能。

Default:

false-->

false

--如果设为true那么在取得连接的同时将校验连接的有效性。

Default:

false-->

true

--用户名。

Default:

null-->

root

--早期的c3p0版本对JDBC接口采用动态反射代理。

在早期版本用途广泛的情况下这个参数

允许用户恢复到动态反射代理以解决不稳定的故障。

最新的非反射代理更快并且已经开始

广泛的被使用,所以这个参数未必有用。

现在原先的动态反射与新的非反射代理同时受到

支持,但今后可能的版本可能不支持动态反射代理。

Default:

false-->

false

con_test

30000

30

10

30

25

10

0

200

300

转:

解决MYSQL8小时问题

最近的一个项目在Hibernate使用C3P0的连接池,数据库为Mysql。

开发测试没有问题,在运行中每个一段长的空闲时间就出现异常:

java代码

1.org.hibernate.exception.JDBCConnectionException:

couldnotexecutequery

2.atorg.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:

74)

3.atorg.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:

43)

4........

5.Causedby:

com.mysql.jdbc.exceptions.MySQLNonTransientConnectionException:

Nooperationsallowedafterconnectionclosed.Connectionwasimplicitlyclosedduetounderlyingexception/error:

6.**BEGINNESTEDEXCEPTION**

7.com.mysql.jdbc.CommunicationsException

8.MESSAGE:

Communicationslinkfailureduetounderlyingexception:

9.**BEGINNESTEDEXCEPTION**

10..SocketException

11.MESSAGE:

Brokenpipe

12.STACKTRACE:

13..SocketException:

Brokenpipe

14.at.SocketOutputStream.socketWrite0(NativeMethod)

15.......

16.**ENDNESTEDEXCEPTION**

查看了Mysql的文档,以及Connector/J的文档以及在线说明发现,出现这种异常的原因是:

Mysql服务器默认的“wait_timeout”是8小时,也就是说一个connection空闲超过8个小时,Mysql将自动断开该connection。

这就是问题的所在,在C3P0pools中的connections如果空闲超过8小时,Mysql将其断开,而C3P0并不知道该connection已经失效,如果这时有Client请求connection,C3P0将该失效的Connection提供给Client,将会造成上面的异常。

解决的方法有3种:

1.增加wait_timeout的时间。

2.减少Connectionpools中connection的lifetime。

3.测试Connectionpools中connection的有效性。

当然最好的办法是同时综合使用上述3种方法,下面就DBCP和C3P0分别做一说明,假设wait_timeout为默认的8小时

DBCP增加以下配置信息:

1.//setto'SELECT1'

2.validationQuery="SELECT1"

3.//setto'true'

4.testWhileIdle="true"

5.//somepositiveinteger

6.timeBetweenEvictionRunsMillis=3600000

7.//settosomethingsmallerthan'wait_timeout'

8.minEvictableIdleTimeMillis=18000000

9.//ifyoudon'tmindahitforeverygetConnection(),setto"true"

10.testOnBorrow="true"

C3P0增加以下配置信息:

1.//获取connnection时测试是否有效

2.testConnectionOnCheckin=true

3.//自动测试的table名称

4.automaticTestTable=C3P0TestTable

5.//settosomethingmuchlessthanwait_timeout,preventsconnectionsfromgoingstale

6.idleConnectionTestPeriod=18000

7.//settosomethingslightlylessthanwait_timeout,preventing'stale'connectionsfrombeinghandedout

8.maxIdleTime=25000

9.//ifyoucantaketheperformance'hit',setto"true"

10.testConnectionOnCheckout=true

更多的配置信息大家可以查看C3P0文档,Connector/J文档,以及DBCP的文档。

转:

我自己的配置:

jdbc.driverClass=com.mysql.jdbc.Driver

jdbc.jdbcUrl=jdbc:

mysql:

//localhost:

3306/test

jdbc.user=root

jdbc.password=12345

jdbc.miniPoolSize=1

jdbc.maxPoolSize=20

jdbc.initialPoolSize=1

jdbc.maxIdleTime=25000

jdbc.acquireIncrement=1

jdbc.acquireRetryAttempts=30

jdbc.acquireRetryDelay=1000

jdbc.testConnectionOnCheckin=true

jdbc.automaticTestTable=c3p0TestTable

jdbc.idleConnectionTestPeriod=18000

jdbc.checkoutTimeout=3000

  

  

  

  

  

    

  

  

  

  

  

  

  

  

  

  

 

importjava.sql.Connection;

importjava.sql.SQLException;

importcom.mchange.v2.c3p0.ComboPooledDataSource;

importcom.mchange.v2.c3p0.DataSources;

publicfinalclassConnectionManager{

   privatestaticConnectionManagerinstance;

   privateComboPooledDataSourceds;

   privateConnectionManager()throwsException{

      

      ds=newComboPooledDataSource();

      ds.setDriverClass("oracle.jdbc.driver.OracleDriver");

      ds.setJdbcUrl("jdbc:

oracle:

thin:

@127.0.0.1:

1521:

orcl");

      ds.setUser("test");

      ds.setPassword("testtest");

      //初始化时获取三个连接,取值应在minPoolSize与maxPoolSize之间。

Default:

3initialPoolSize

      ds.setInitialPoolSize(3);

      //连接池中保留的最大连接数。

Default:

15maxPoolSize

      ds.setMaxPoolSize(10);

      ////连接池中保留的最小连接数。

      //ds.setMinPoolSize

(1);

      //当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。

Default:

3acquireIncrement

      ds.setAcquireIncrement

(1);

      //每60秒检查所有连接池中的空闲连接。

Default:

0 idleConnectionTestPeriod

      ds.setIdleConnectionTestPeriod(60);

      //最大空闲时间,25000秒内未使用则连接被丢弃。

若为0则永不丢弃。

Default:

0 maxIdleTime

      ds.setMaxIdleTime(25000);

      //连接关闭时默认将所有未提交的操作回滚。

Default:

falseautoCommitOnClose

      ds.setAutoCommitOnClose(true);

      //定义所有连接测试都执行的测试语句。

在使用连接测试的情况下这个一显著提高测试速度。

注意:

      //测试的表必须在初始数据源的时候就存在。

Default:

null preferredTestQuery

      ds.setPreferredTestQuery("selectsysdatefromdual");

      //因性能消耗大请只在需要的时候使用它。

如果设为true那么在每个connection提交的

      //时候都将校验其有效性。

建议使用idleConnectionTestPeriod或automaticTestTable

      //等方法来提升连接测试的性能。

Default:

falsetestConnectionO

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1