c3p0连接池配置.docx
- 文档编号:5304649
- 上传时间:2022-12-15
- 格式:DOCX
- 页数:10
- 大小:18.90KB
c3p0连接池配置.docx
《c3p0连接池配置.docx》由会员分享,可在线阅读,更多相关《c3p0连接池配置.docx(10页珍藏版)》请在冰豆网上搜索。
c3p0连接池配置
--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。
Default:
3-->
--定义在从数据库获取新连接失败后重复尝试的次数。
Default:
30-->
--两次连接中间隔时间,单位毫秒。
Default:
1000-->
--连接关闭时默认将所有未提交的操作回滚。
Default:
false-->
--c3p0将建一名为Test的空表,并使用其自带的查询语句进行测试。
如果定义了这个参数那么
属性preferredTestQuery将被忽略。
你不能在这Test表上进行任何操作,它将只供c3p0测试
使用。
Default:
null-->
--获取连接失败将会引起所有等待连接池来获取连接的线程抛出异常。
但是数据源仍有效
保留,并在下次调用getConnection()的时候继续尝试获取连接。
如果设为true,那么在尝试
获取连接失败后该数据源将申明已断开并永久关闭。
Default:
false-->
--当连接池用完时客户端调用getConnection()后等待获取新连接的时间,超时后将抛出
SQLException,如设为0则无限期等待。
单位毫秒。
Default:
0-->
--通过实现ConnectionTester或QueryConnectionTester的类来测试连接。
类名需制定全路径。
Default:
.mchange.v2.c3p0.impl.DefaultConnectionTester-->
--指定c3p0libraries的路径,如果(通常都是这样)在本地即可获得那么无需设置,默认null即可
Default:
null-->
--Stronglydisrecommended.Settingthistotruemayleadtosubtleandbizarrebugs.
(文档原文)作者强烈建议不使用的一个属性-->
--每60秒检查所有连接池中的空闲连接。
Default:
0-->
--初始化时获取三个连接,取值应在minPoolSize与maxPoolSize之间。
Default:
3-->
--最大空闲时间,60秒未使用则连接被丢弃。
若为0则永不丢弃。
Default:
0-->
--连接池中保留的最接数。
Default:
15-->
--JDBC的标准参数,用以控制数据源加载的PreparedStatements数量。
但由于预缓存的statements
属于单个connection而不是整个连接池。
所以设置这个参数需要考虑到多方面的因素。
如果maxStatements与maxStatementsPerConnection均为0,则缓存被关闭。
Default:
0-->
--maxStatementsPerConnection定义了连接池单个连接所拥有的最大缓存statements数。
Default:
0-->
--c3p0是异步操作的,缓慢的JDBC操作通过帮助进程完成。
扩展这些操作可以有效的提升性能
通过多线程实现多个操作同时被执行。
Default:
3-->
--当用户调用getConnection()时使root用户成为去获取连接的用户。
主要用于连接池连接非c3p0
的数据源时。
Default:
null-->
--与overrideDefaultUser参数对应使用的一个参数。
Default:
null-->
--密码。
Default:
null-->
--定义所有连接测试都执行的测试语句。
在使用连接测试的情况下这个一显著提高测试速度。
注意:
测试的表必须在初始数据源的时候就存在。
Default:
null-->
--用户修改系统配置参数执行前最多等待300秒。
Default:
300-->
--因性能消耗大请只在需要的时候使用它。
如果设为true那么在每个connection提交的
时候都将校验其有效性。
建议使用idleConnectionTestPeriod或automaticTestTable
等方法来提升连接测试的性能。
Default:
false-->
--如果设为true那么在取得连接的同时将校验连接的有效性。
Default:
false-->
--用户名。
Default:
null-->
--早期的c3p0版本对JDBC接口采用动态反射代理。
在早期版本用途广泛的情况下这个参数
允许用户恢复到动态反射代理以解决不稳定的故障。
最新的非反射代理更快并且已经开始
广泛的被使用,所以这个参数未必有用。
现在原先的动态反射与新的非反射代理同时受到
支持,但今后可能的版本可能不支持动态反射代理。
Default:
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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c3p0 连接 配置