c3p0连接池配置_第1页
c3p0连接池配置_第2页
c3p0连接池配置_第3页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、<c3p0-c on fig>vdefault-con fig><!-当连接池中的连接耗尽的时候c3po 一次同时获取的连接数。Default: 3 -> <propertyn ame="acquire In creme nt">3</property><!-定义在从数据库获取新连接失败后重复尝试的次数。Default: 30 ->vproperty n ame="acquireRetryAttempts">30</property><!-两次连接中间隔时间,单位毫

2、秒。Default: 1000 -><property n ame="acquireRetryDelay">1000</property><!-连接关闭时默认将所有未提交的操作回滚。Default: false -><property n ame="autoCommit On Close">false</property><!-c3p0 将建一张名为Test的空表,并使用其自带的查询语句进行测试。如果定义了这个参数那 么属性 preferredTestQuery将被忽略。你不能在这张

3、 Test表上进行任何操作,它将只供c3p0测试使用。Default: null->vproperty n ame="automaticTestTable">Testv/property><!-获取连接失败将会引起所有等待连接池来获取连接的线程抛出异常。但是数据源仍有效 保留,并在下次调用getConnection()的时候继续尝试获取连接。如果设为true,那么在尝试获取连接失败后该数据源将申明已断开并永久关闭。Default: false-> vproperty n ame="breakAfterAcquireFailure&qu

4、ot;>false</property><!-当连接池用完时客户端调用 getConnection()后等待获取新连接的时间,超时后将抛岀SQLException,女口设为 0 则 无限期等待。单位毫秒。Default:0 -> vpropertyn ame="checkoutTimeout">100</property><!-通过实现 ConnectionTester或QueryConnectionTester的类来测试连接。类名需制定全路径。Default:com.mcha nge.v2.c3p0.impl.Defa

5、ultCo nn ectio nTester-vpropertyn ame="c onn ecti on TesterClassName"></property><!-指定c3p0 libraries的路径,如果(通常都是这样)在本地即可获得那么无需设置,默认null即可Default: n ull-> vproperty n ame="factoryClassLocati on"n ull</property><!-Str on gly disrecomme nded. Setti ng this to

6、true may lead to subtle and bizarre bugs.(文档原文)作者强烈建议不使用的一个属性-> vproperty n ame="forceIg noreU nresolvedTra nsactio ns">falsev/property>v!- 每 60 秒检查所有连接池中 的空闲连接。Default:0-> vpropertyn ame="idleC onnection TestPeriod">60v/property><!-初始化时获取三个连接,取值应在 minPoolSiz

7、e与 maxPoolSize 之间。Default: 3-> vproperty name="initialPoolSize">3</property><!-最大空闲时间,60秒内未使用则连接被丢弃。若为 o则永不丢弃。Default: 0 -> <property n ame="maxldleTime">60</property><!- 连接池 中保留 的最大连接数。 Default:15-> vpropertyn ame="maxPoolSize">15

8、</property><!-JDBC 的标准参数,用以控制数据源内加载的PreparedStateme nts数量。但由于预缓存的stateme nts属于单个connection 而不是整个连接池。所以设置这个参数需要考虑到多方面的因素。如果 maxStatements与 maxStatementsPerConnection均为 0 ,则缓存被关闭。 Default:o-> vproperty name="maxStatements">1OO</property><!-maxStateme ntsPerCo nn ecti

9、on定义了连接池内单个连接所拥有的最大缓存stateme nts数。Default: o -> vproperty name="maxStatementsPerConnection"></property><!-c3p0 是异步操作的,缓慢的JDBC操作通过帮助进程完成。扩展这些操作可以有效的提升性能 通过多线程实现多个操作同时被执行。 Default: 3->vproperty n ame="num HelperThreads">3</property><!-当用户调用getConnectio

10、n()时使root用户成为去获取连接的用户。主要用于连接池连接非c3p0的数 据源时。Default:null-vpropertyn ame="overrideDefaultUser">rootv/property>v!- 与 overrideDefaultUser 参数对应使用 的一个参数。Default: null-vproperty n ame="overrideDefaultPassword">passwordv/property>v!-密码。Default: null-> vproperty name="

11、password">v/property>v!-定义所有连接测试都执行的测试语句。在使用连接测试的情况下这个一显著提高测试速度。注意: 测试的表必须在初始数据源的时候就存在。Default: null-> |vpropertyn ame="preferredTestQuery">selectid from test whereid=1v/property>v!-用户修改系统配置参数执 行前最多等待300 秒。Default: 300-> vpropertyn ame="propertyCycle">30

12、0v/property>v!-因性能消耗大请只在需要的时候使用它。如果设为true那么在每个conn ection 提交的时候都将校验其有效性。建议使用idleConnectionTestPeriod或automaticTestTable等方法来提升连接测试的性能。 Default:false -> vpropertyn ame="testC onn ectio nOn Checkout">falsev/property><!-如果设为true那么在取得连接的同时将校验连接的有效性。Default: false -> vpropertyn

13、 ame="testC onnectionOn Check in" >true</property><!-用户名。Default: nuii-> <property name="user">root</property><!-早期的C3po版本对JDBC接口采用动态反射代理。在早期版本用途广泛的情况下这个参数 允许用户恢复到动态反射代理以解决不稳定的故障。最新的非反射代理更快并且已经开始 广泛的被使用,所以这个参数未必有用。现在原先的动态反射与新的非反射代理同时受到支持,但今后可能的版本可能不支

14、持动态反射 代理。Default: false-vproperty n ame="usesTraditi on alReflectiveProxies">false</property>acqu ireln creme nt -> 5 acquireRetryAttempts -> 30 acquireRetryDelay -> 1000 autoCommit On Close -> false automaticTestTable -> n ull breakAfterAcquireFailure -> true ch

15、eckoutTimeout -> 0->conn ectio nCustomizerClassName -> n ull conn ectio nTesterClassName com.mcha nge.v2.c3p0.impl.DefaultC onn ecti on Tester dataSourceName -> 1bqp8hc8ezqxpjc1hp9g ny |704baa debugU nretu rn edC onn ecti on StackTraces -> false description -> nulldriverClass ->

16、 factoryClassLocation -> null forceIgnoreUnresolvedTransactions -> false identityToken -> 1bqp8hc8ezqxpjc1hp9gny|704baa idleConnectionTestPeriod -> 60initialPoolSize -> 5jdbcUrl -> jdbc:mysql:/localhost:3306/db_temp?useUnicode=true&character Encoding=utf-8lastAcquisitionFailure

17、DefaultUser -> null maxAdministrativeTaskTime -> 0 maxConnectionAge -> 0 maxIdleTime -> 60maxIdleTimeExcessConnections -> 0 maxPoolSize -> 30 maxStatements -> 0maxStatementsPerConnection -> 0 minPoolSize -> 5 numHelperThreads -> 3 numThreadsAwaitingCheckoutDefaultUser -

18、> 0preferredTestQuery -> null properties -> user=*password=* propertyCycle -> 0 testConnectionOnCheckin -> false testConnectionOnCheckout -> false unreturnedConnectionTimeout -> 0 usesTraditionalReflectiveProxies -> falsepackage com.paipaiestore.database.c3p0;import java.util

19、.HashMap;import java.util.Iterator;import java.util.Map;import java.util.Set;import javax.sql.DataSource;import com.mchange.v2.c3p0.DataSources; /* 数据连接池工厂* author samland* version 1.0, 2006-11*/public class DBPoolFactory private static DBPoolFactory dbpoolFactory = new DBPoolFactory(); /* 连接池列表*/pr

20、ivate static Map poollist = new HashMap();private DBPoolFactory() public static DBPoolFactory getInstance()return dbpoolFactory;/* 向连接池列表添加一个新的池化( Pooled )数据源* param key* paramconfigFile 配置文件名。为了简化参数输入与便于外部维护,可以把 配置好的文件传入这里分析*/ public void add(String key, String configFile) /read config from file, a

21、nd build a dbpool/* 向连接池列表添加一个新的池化( Pooled )数据源* param key* param driver 数据连接驱动,如 * param url 连接串, 如 jdbc:mysql:/localhost/samland* param username 数据库连接用户名,如 samland* param password 数据库连接用户密码* throws Exception*/ public void add(String key, String driver, String url, String username, String password)

22、 throws Exceptionif (key=null) throw new Exception("DBPool 'key' CANNOT be null") ;Class.forName(driver);DataSource ds_unpooled = DataSources.unpooledDataSource(url, username, password);DataSource ds_pooled = DataSources.pooledDataSource( ds_unpooled ); if (poollist.containsKey(key

23、)poollist.remove(key);poollist.put(key, ds_pooled);/* 根据 key 字符串获取连接池* param key* return DBPool 连接池* throws Exception*/ public DBPool getDBPool(String key) throws Exceptionif (key=null) throw new Exception("DBPool 'key' CANNOT be null") ;DataSource ds =DBPool dbpool =(DataSource)po

24、ollist.get(key); new DBPool();dbpool.setDs_pooled(ds);return dbpool;/四、连接池的使用通过DBPool来获取数据库连接(jdbc conn ection )。4.1 由 DBPoolFactory 工厂产生一个 DBPool4.2同时,DBPoolFactory工厂根据传入的参数key向这个DBPool注入数据源4.3 从DBPool产生线程内的Connection/package com.paipaiestore.database.c3p0;import java.sql.Connection;import java.sql

25、.SQLException;import javax.sql.DataSource;public class DBPool /get 数据源* return*/ public DataSource getDs_pooled() return ds_pooled;* 数据库连接。同一个线程使用同一个连接 */ protected static ThreadLocal connection = new ThreadLocal();/* * 数据源,需由 DBPoolFactory 工厂注入*/ private DataSource ds_pooled;* 不能独立构造,必须从 DBPoolFact

26、ory 工厂产生 */protected DBPool()* 注入数据源* param ds_pooled*/public void setDs_pooled(DataSource ds_pooled) this.ds_pooled = ds_pooled;* 获得数据库连接* 同一个线程只返回相同的一个连接* return Connection* throws SQLException*/ public Connection getConnection() throws SQLException Connection con = (Connection)connection.get();if

27、 (con=null) con = ds_pooled.getConnection(); connection.set(con);return con;/DBPool 成为五、改进线程内数据库连接的使用 为了适应程序已经使用开的 jdbc 事务管理,因此需要改进 Transaction 类,而原来的 DBPool 则缩减为如下代码: / public class DBPool private DataSource ds_pooled;protected DBPool() public DataSource getDs_pooled() return ds_pooled;public void

28、setDs_pooled(DataSource ds_pooled) this.ds_pooled = ds_pooled; / package com.paipaiestore.database.c3p0;import java.sql.Connection;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import javax.sql.DataSource;public class Transaction /* 数据库连接。同一个线程使用同一个连接。*/protected s

29、tatic ThreadLocal connection = new ThreadLocal();protected static boolean isInUsed = false;/* 开始一个事务* 如果当前线程的数据库连接不存在,则会新获得一个数据库连接* param key* throws Exception*/public static void beginTransaction(String key) throws ExceptionConnection conn = (Connection)connection.get();if (conn=null) conn = create

30、Connection(key);setConnection(conn);conn.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED); conn.setAutoCommit(false);isInUsed = true;/* 提交一个事务* throws SQLException*/public static void commitTransaction() throws SQLException Connection conn = (Connection)connection.get(); mit();/* 回滚一个事

31、务* throws SQLException*/ public static void rollbackTransaction() throws SQLException Connection conn = (Connection)connection.get();conn.rollback();public static boolean getIsInUsed() return isInUsed;private static void closeConnection() try Connection conn = (Connection)connection.get(); if (conn!

32、=null) connection.set(null); conn.close(); catch(SQLException sqlexception) private static void close(ResultSet rs) tryStatement st = rs.getStatement();Connection conn = st.getConnection(); rs.close();st.close();conn.close();catch(Exception exception) /*获得数据库连接同一个线程只返回相同的一个连接* return* throws SQLExce

33、ption */ public static Connection getConnection() throws SQLException Connection conn = null;conn = (Connection)connection.get();if(conn = null)throw new NullPointerException();elsereturn conn;private static void setConnection(Connection conn) connection.set(conn);/* 获得一个新的数据库连接* param key* return Connection* throws Exception*/private static Connection createConnection(String

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论