c3p0連接池配置_第1頁
c3p0連接池配置_第2頁
c3p0連接池配置_第3頁
已閱讀5頁,還剩5頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、<c3p0-c on fig>vdefault-con fig><!-當(dāng)連接池中的連接耗盡的時候c3po 一次同時獲取的連接數(shù)。Default: 3 -> <propertyn ame="acquire In creme nt">3</property><!-定義在從數(shù)據(jù)庫獲取新連接失敗后重復(fù)嘗試的次數(shù)。Default: 30 ->vproperty n ame="acquireRetryAttempts">30</property><!-兩次連接中間隔時間,單位毫

2、秒。Default: 1000 -><property n ame="acquireRetryDelay">1000</property><!-連接關(guān)閉時默認(rèn)將所有未提交的操作回滾。Default: false -><property n ame="autoCommit On Close">false</property><!-c3p0 將建一張名為Test的空表,并使用其自帶的查詢語句進(jìn)行測試。如果定義了這個參數(shù)那 么屬性 preferredTestQuery將被忽略。你不能在這張

3、 Test表上進(jìn)行任何操作,它將只供c3p0測試使用。Default: null->vproperty n ame="automaticTestTable">Testv/property><!-獲取連接失敗將會引起所有等待連接池來獲取連接的線程拋出異常。但是數(shù)據(jù)源仍有效 保留,并在下次調(diào)用getConnection()的時候繼續(xù)嘗試獲取連接。如果設(shè)為true,那么在嘗試獲取連接失敗后該數(shù)據(jù)源將申明已斷開并永久關(guān)閉。Default: false-> vproperty n ame="breakAfterAcquireFailure&qu

4、ot;>false</property><!-當(dāng)連接池用完時客戶端調(diào)用 getConnection()后等待獲取新連接的時間,超時后將拋岀SQLException,女口設(shè)為 0 則 無限期等待。單位毫秒。Default:0 -> vpropertyn ame="checkoutTimeout">100</property><!-通過實現(xiàn) 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的路徑,如果(通常都是這樣)在本地即可獲得那么無需設(shè)置,默認(rèn)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><!-初始化時獲取三個連接,取值應(yīng)在 minPoolSiz

7、e與 maxPoolSize 之間。Default: 3-> vproperty name="initialPoolSize">3</property><!-最大空閑時間,60秒內(nèi)未使用則連接被丟棄。若為 o則永不丟棄。Default: 0 -> <property n ame="maxldleTime">60</property><!- 連接池 中保留 的最大連接數(shù)。 Default:15-> vpropertyn ame="maxPoolSize">15

8、</property><!-JDBC 的標(biāo)準(zhǔn)參數(shù),用以控制數(shù)據(jù)源內(nèi)加載的PreparedStateme nts數(shù)量。但由于預(yù)緩存的stateme nts屬于單個connection 而不是整個連接池。所以設(shè)置這個參數(shù)需要考慮到多方面的因素。如果 maxStatements與 maxStatementsPerConnection均為 0 ,則緩存被關(guān)閉。 Default:o-> vproperty name="maxStatements">1OO</property><!-maxStateme ntsPerCo nn ecti

9、on定義了連接池內(nèi)單個連接所擁有的最大緩存stateme nts數(shù)。Default: o -> vproperty name="maxStatementsPerConnection"></property><!-c3p0 是異步操作的,緩慢的JDBC操作通過幫助進(jìn)程完成。擴展這些操作可以有效的提升性能 通過多線程實現(xiàn)多個操作同時被執(zhí)行。 Default: 3->vproperty n ame="num HelperThreads">3</property><!-當(dāng)用戶調(diào)用getConnectio

10、n()時使root用戶成為去獲取連接的用戶。主要用于連接池連接非c3p0的數(shù) 據(jù)源時。Default:null-vpropertyn ame="overrideDefaultUser">rootv/property>v!- 與 overrideDefaultUser 參數(shù)對應(yīng)使用 的一個參數(shù)。Default: null-vproperty n ame="overrideDefaultPassword">passwordv/property>v!-密碼。Default: null-> vproperty name="

11、password">v/property>v!-定義所有連接測試都執(zhí)行的測試語句。在使用連接測試的情況下這個一顯著提高測試速度。注意: 測試的表必須在初始數(shù)據(jù)源的時候就存在。Default: null-> |vpropertyn ame="preferredTestQuery">selectid from test whereid=1v/property>v!-用戶修改系統(tǒng)配置參數(shù)執(zhí) 行前最多等待300 秒。Default: 300-> vpropertyn ame="propertyCycle">30

12、0v/property>v!-因性能消耗大請只在需要的時候使用它。如果設(shè)為true那么在每個conn ection 提交的時候都將校驗其有效性。建議使用idleConnectionTestPeriod或automaticTestTable等方法來提升連接測試的性能。 Default:false -> vpropertyn ame="testC onn ectio nOn Checkout">falsev/property><!-如果設(shè)為true那么在取得連接的同時將校驗連接的有效性。Default: false -> vpropertyn

13、 ame="testC onnectionOn Check in" >true</property><!-用戶名。Default: nuii-> <property name="user">root</property><!-早期的C3po版本對JDBC接口采用動態(tài)反射代理。在早期版本用途廣泛的情況下這個參數(shù) 允許用戶恢復(fù)到動態(tài)反射代理以解決不穩(wěn)定的故障。最新的非反射代理更快并且已經(jīng)開始 廣泛的被使用,所以這個參數(shù)未必有用。現(xiàn)在原先的動態(tài)反射與新的非反射代理同時受到支持,但今后可能的版本可能不支

14、持動態(tài)反射 代理。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; /* 數(shù)據(jù)連接池工廠* 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 )數(shù)據(jù)源* param key* paramconfigFile 配置文件名。為了簡化參數(shù)輸入與便于外部維護(hù),可以把 配置好的文件傳入這里分析*/ public void add(String key, String configFile) /read config from file, a

21、nd build a dbpool/* 向連接池列表添加一個新的池化( Pooled )數(shù)據(jù)源* param key* param driver 數(shù)據(jù)連接驅(qū)動,如 * param url 連接串, 如 jdbc:mysql:/localhost/samland* param username 數(shù)據(jù)庫連接用戶名,如 samland* param password 數(shù)據(jù)庫連接用戶密碼* 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);/* 根據(jù) 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來獲取數(shù)據(jù)庫連接(jdbc conn ection )。4.1 由 DBPoolFactory 工廠產(chǎn)生一個 DBPool4.2同時,DBPoolFactory工廠根據(jù)傳入的參數(shù)key向這個DBPool注入數(shù)據(jù)源4.3 從DBPool產(chǎn)生線程內(nèi)的Connection/package com.paipaiestore.database.c3p0;import java.sql.Connection;import java.sql

25、.SQLException;import javax.sql.DataSource;public class DBPool /get 數(shù)據(jù)源* return*/ public DataSource getDs_pooled() return ds_pooled;* 數(shù)據(jù)庫連接。同一個線程使用同一個連接 */ protected static ThreadLocal connection = new ThreadLocal();/* * 數(shù)據(jù)源,需由 DBPoolFactory 工廠注入*/ private DataSource ds_pooled;* 不能獨立構(gòu)造,必須從 DBPoolFact

26、ory 工廠產(chǎn)生 */protected DBPool()* 注入數(shù)據(jù)源* param ds_pooled*/public void setDs_pooled(DataSource ds_pooled) this.ds_pooled = ds_pooled;* 獲得數(shù)據(jù)庫連接* 同一個線程只返回相同的一個連接* 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 成為五、改進(jìn)線程內(nèi)數(shù)據(jù)庫連接的使用 為了適應(yīng)程序已經(jīng)使用開的 jdbc 事務(wù)管理,因此需要改進(jìn) 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 /* 數(shù)據(jù)庫連接。同一個線程使用同一個連接。*/protected s

29、tatic ThreadLocal connection = new ThreadLocal();protected static boolean isInUsed = false;/* 開始一個事務(wù)* 如果當(dāng)前線程的數(shù)據(jù)庫連接不存在,則會新獲得一個數(shù)據(jù)庫連接* 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;/* 提交一個事務(wù)* throws SQLException*/public static void commitTransaction() throws SQLException Connection conn = (Connection)connection.get(); mit();/* 回滾一個事

31、務(wù)* 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) /*獲得數(shù)據(jù)庫連接同一個線程只返回相同的一個連接* 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);/* 獲得一個新的數(shù)據(jù)庫連接* param key* return Connection* throws Exception*/private static Connection createConnection(String

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論