专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »Java教程 » c3p0连接池:C3P0连接池详细配置和实现 »正文

c3p0连接池:C3P0连接池详细配置和实现

来源: 发布时间:星期四, 2009年2月12日 浏览:87次 评论:0


<c3p0-config>
<default-config>
<!--当连接池中连接耗尽时候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="AfterAcquireFailure">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>

<!--化时获取 3个连接取值应在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数量但由于预缓存Cachestatements
属于单个connection而不是整个连接池所以设置这个参数需要考虑到多方面原因
如果maxStatements和maxStatementsPerConnection均为0则缓存Cache被关闭Default: 0-->
<property name="maxStatements">100</property>

<!--maxStatementsPerConnection定义了连接池内单个连接所拥有最大缓存Cachestatements数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-->
<property name="usesTraditionalReflectiveProxies">false</property>

<property name="automaticTestTable">con_test</property>
<property name="checkoutTimeout">30000</property>
<property name="idleConnectionTestPeriod">30</property>
<property name="initialPoolSize">10</property>
<property name="maxIdleTime">30</property>
<property name="maxPoolSize">25</property>
<property name="minPoolSize">10</property>
<property name="maxStatements">0</property>
<user-overrides user="swaldman">
</user-overrides>
</default-config>
<named-config name="dumbTestConfig">
<property name="maxStatements">200</property>
<user-overrides user="poop">
<property name="maxStatements">300</property>
</user-overrides>
</named-config>
</c3p0-config>

c3p0实现

<!--
全局使用c3p0
1. server.xml中GlobalNamingResources
2. context.xml中ResourceLink
3. web.xml
-->
全局使用c3p0
1. server.xml中GlobalNamingResources
<Resource auth="Container"
description="DB Connection"
driverClass="org.gjt.mm.mysql.Driver"
maxPoolSize="10"
minPoolSize="2"
acquireIncrement="2"
name="jdbc/mysql1"
user="root"
password="xxxxxx"
factory="org.apache.naming.factory.BeanFactory"
type="com.mchange.v2.c3p0.ComboPooledDataSource"
jdbcUrl="jdbc:mysql://localhost:3306/noticemanager?characterEncoding=UTF-8&amp;useUnicode=TRUE&amp;autoReconnect=true" />

2. context.xml中ResourceLink
<ResourceLink name="jdbc/mysql1" global="jdbc/mysql1" type="javax.sql.DataSource"/>

3. web.xml
<resource-ref>
<description>Tomcat Datasource</description>
<res-ref-name>jdbc/mysql1</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>



4.Hibernate中配置

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<!-- Generated by MyEclipse Hibernate Tools. -->
<hibernate-configuration>

<session-factory>
<property name="c3p0.min_size">5</property>
<property name="c3p0.max_size">100</property>
<property name="c3p0.time_out">1800</property>
<property name="c3p0.max_statement">100</property>

<property name="dialect">
org.hibernate.dialect.MySQLDialect
</property>
<property name="jndi.url">
jdbc:mysql://localhost:3306/noticemanager
</property>
<!-- <property name="jndi.">
org.gjt.mm.mysql.Driver
</property> -->
<property name="connection.datasource">
java:comp/env/jdbc/mysql1
</property>
<property name="connection.username">root</property>
<property name="connection.password">xxxxxxxxx</property>
<property name="hibernate.show_sql">true</property>
<!-- <property name="hibernate.use_outer_join">true</property> -->
<mapping resource="com/dpoo/pojo/Notice.hbm.xml" />

</session-factory>

</hibernate-configuration>


JDBC实现:和DateSource相同

try {
Context ctx = InitialContext;
ds = (DataSource) ctx.lookup("java:comp/env/jdbc/mysql1");
conn = ds.getConnection;
} catch (NamingException e) {
e.prStackTrace;
null;

} catch (SQLException e) {
e.prStackTrace;
null;
}
0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: