c3p0连接池配置.docx

上传人:b****5 文档编号:7575469 上传时间:2023-05-11 格式:DOCX 页数:10 大小:18.90KB
下载 相关 举报
c3p0连接池配置.docx_第1页
第1页 / 共10页
c3p0连接池配置.docx_第2页
第2页 / 共10页
c3p0连接池配置.docx_第3页
第3页 / 共10页
c3p0连接池配置.docx_第4页
第4页 / 共10页
c3p0连接池配置.docx_第5页
第5页 / 共10页
c3p0连接池配置.docx_第6页
第6页 / 共10页
c3p0连接池配置.docx_第7页
第7页 / 共10页
c3p0连接池配置.docx_第8页
第8页 / 共10页
c3p0连接池配置.docx_第9页
第9页 / 共10页
c3p0连接池配置.docx_第10页
第10页 / 共10页
亲,该文档总共10页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

c3p0连接池配置.docx

《c3p0连接池配置.docx》由会员分享,可在线阅读,更多相关《c3p0连接池配置.docx(10页珍藏版)》请在冰点文库上搜索。

c3p0连接池配置.docx

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:

.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

 

acquireIncrement->5

acquireRetryAttempts->30

acquireRetryDelay->1000

autoCommitOnClose->false

automaticTestTable->null

breakAfterAcquireFailure->true

checkoutTimeout->0

connectionCustomizerClassName->null

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

dataSourceName->1bqp8hc8ezqxpjc1hp9gny|704baa

debugUnreturnedConnectionStackTraces->false

description->null

driverClass->.mysql.jdbc.Driver

factoryClassLocation->null

forceIgnoreUnresolvedTransactions->false

identityToken->1bqp8hc8ezqxpjc1hp9gny|704baa

idleConnectionTestPeriod->60

initialPoolSize->5

jdbcUrl->jdbc:

mysql:

//localhost:

3306/db_temp?

useUnicode=true&characterEncoding=utf-8

lastAcquisitionFailureDefaultUser->null

maxAdministrativeTaskTime->0

maxConnectionAge->0

maxIdleTime->60

maxIdleTimeExcessConnections->0

maxPoolSize->30

maxStatements->0

maxStatementsPerConnection->0

minPoolSize->5

numHelperThreads->3

numThreadsAwaitingCheckoutDefaultUser->0

preferredTestQuery->null

properties->{user=******password=******}

propertyCycle->0

testConnectionOnCheckin->false

testConnectionOnCheckout->false

unreturnedConnectionTimeout->0

usesTraditionalReflectiveProxies->false

 

package.paipaiestore.database.c3p0;

importjava.util.HashMap;

importjava.util.Iterator;

importjava.util.Map;

importjava.util.Set;

importjavax.sql.DataSource;

import.mchange.v2.c3p0.DataSources;

/**

*数据连接池工厂

*authorsamland

*version1.0,2006-11

*/

publicclassDBPoolFactory{

privatestaticDBPoolFactorydbpoolFactory=newDBPoolFactory();

/**

*连接池列表

*/

privatestaticMappoollist=newHashMap();

privateDBPoolFactory(){

}

publicstaticDBPoolFactorygetInstance(){

returndbpoolFactory;

}

/**

*向连接池列表添加一个新的池化(Pooled)数据源

*paramkey

*paramconfigFile配置文件名。

为了简化参数输入与便于外部维护,可以把配置好的文件传入这里分析

*/

publicvoidadd(Stringkey,StringconfigFile){

//readconfigfromfile,andbuildadbpool

}

/**

*向连接池列表添加一个新的池化(Pooled)数据源

*paramkey

*paramdriver数据连接驱动,如com.mysql.jdbc.Driver

*paramurl连接串,如jdbc:

mysql:

//localhost/samland

*paramusername数据库连接用户名,如samland

*parampassword数据库连接用户密码

*throwsException

*/

publicvoidadd(Stringkey,Stringdriver,Stringurl,Stringusername,Stringpassword)

throwsException{

if(key==null)thrownewException("DBPool'key'CANNOTbenull");

Class.forName(driver);

DataSourceds_unpooled=DataSources.unpooledDataSource(url,username,password);

DataSourceds_pooled=DataSources.pooledDataSource(ds_unpooled);

if(poollist.containsKey(key)){

poollist.remove(key);

}

poollist.put(key,ds_pooled);

}

/**

*根据key字符串获取连接池

*paramkey

*returnDBPool连接池

*throwsException

*/

publicDBPoolgetDBPool(Stringkey)throwsException{

if(key==null)thrownewException("DBPool'key'CANNOTbenull");

DataSourceds=(DataSource)poollist.get(key);

DBPooldbpool=newDBPool();

dbpool.setDs_pooled(ds);

returndbpool;

}

}

///////////////////////////////////////////////////////////////

四、连接池的使用

通过DBPool来获取数据库连接(jdbcconnection)。

4.1由DBPoolFactory工厂产生一个DBPool

4.2同时,DBPoolFactory工厂根据传入的参数key向这个DBPool注入数据源

4.3从DBPool产生线程的Connection

///////////////////////////////////////////////////////////////

package.paipaiestore.database.c3p0;

importjava.sql.Connection;

importjava.sql.SQLException;

importjavax.sql.DataSource;

publicclassDBPool{

/**

*数据库连接。

同一个线程使用同一个连接。

*/

protectedstaticThreadLocalconnection=newThreadLocal();

/**

*数据源,需由DBPoolFactory工厂注入

*/

privateDataSourceds_pooled;

/**

*不能独立构造,必须从DBPoolFactory工厂产生

*/

protectedDBPool(){}

/**

*get数据源

*return

*/

publicDataSourcegetDs_pooled(){

returnds_pooled;

}

/**

*注入数据源

*paramds_pooled

*/

publicvoidsetDs_pooled(DataSourceds_pooled){

this.ds_pooled=ds_pooled;

}

/**

*获得数据库连接

*同一个线程只返回相同的一个连接。

*returnConnection

*throwsSQLException

*/

publicConnectiongetConnection()throwsSQLException{

Connectioncon=(Connection)connection.get();

if(con==null){

con=ds_pooled.getConnection();

connection.set(con);

}

returncon;

}

}

///////////////////////////////////////////////////////////////

五、改进线程数据库连接的使用

为了适应程序已经使用开的jdbc事务管理,因此需要改进DBPool成为Transaction类,

而原来的DBPool则缩减为如下代码:

///////////////////////////////////////////////////////////////

publicclassDBPool{

privateDataSourceds_pooled;

protectedDBPool(){}

publicDataSourcegetDs_pooled(){

returnds_pooled;

}

publicvoidsetDs_pooled(DataSourceds_pooled){

this.ds_pooled=ds_pooled;

}

}

///////////////////////////////////////////////////////////////

package.paipaiestore.database.c3p0;

importjava.sql.Connection;

importjava.sql.ResultSet;

importjava.sql.SQLException;

importjava.sql.Statement;

importjavax.sql.DataSource;

publicclassTransaction{

/**

*数据库连接。

同一个线程使用同一个连接。

*/

protectedstaticThreadLocalconnection=newThreadLocal();

protectedstaticbooleanisInUsed=false;

/**

*开始一个事务

*如果当前线程的数据库连接不存在,则会新获得一个数据库连接

*paramkey

*throwsException

*/

publicstaticvoidbeginTransaction(Stringkey)throwsException{

Connectionconn=(Connection)connection.get();

if(conn==null){

conn=createConnection(key);

setConnection(conn);

}

conn.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);

conn.setAutoCommit(false);

isInUsed=true;

}

/**

*提交一个事务

*throwsSQLException

*/

publicstaticvoidcommitTransaction()throwsSQLException{

Connectionconn=(Connection)connection.get();

mit();

}

/**

*回滚一个事务

*throwsSQLException

*/

publicstaticvoidrollbackTransaction()throwsSQLException{

Connectionconn=(Connection)connection.get();

conn.rollback();

}

publicstaticbooleangetIsInUsed(){

returnisInUsed;

}

privatestaticvoidcloseConnection(){

try{

Connectionconn=(Connection)connection.get();

if(conn!

=null){

connection.set(null);

conn.close();

}

}catch(SQLExceptionsqlexception){

}

}

privatestaticvoidclose(ResultSetrs){

try

{

Statementst=rs.getStatement();

Connectionconn=st.getConnection();

rs.close();

st.close();

conn.close();

}

catch(Exceptionexception){}

}

/**

*获得数据库连接

*同一个线程只返回相同的一个连接。

*return

*throwsSQLException

*/

publicstaticConnectiongetConnection()throwsSQLException{

Connectionconn=null;

conn=(Connection)connectio

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

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2