熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java開源技術 >> 正文

使用Spring管理數據源連接池

2013-11-23 20:37:26  來源: Java開源技術 
    不管通過何種持久化技術都必須通過數據連接訪問數據庫在Spring中數據連接是通過數據源獲得的在以往的應用中數據源一般是 Web應用服務器提供的在Spring中你不但可以通過JNDI獲取應用服務器的數據源也可以直接在Spring容器中配置數據源此外你還可以通過代碼的方式創建一個數據源以便進行無依賴的單元測試
   
    配置一個數據源
   
    Spring在第三方依賴包中包含了兩個數據源的實現類包其一是Apache的DBCP其二是 CP在此重點講講CP的配置此後會更新DBCP
   
    <cpconfig>
   
    <defaultconfig>
   
    <!當連接池中的連接耗盡的時候cp一次同時獲取的連接數Default: >
   
    <property name=acquireIncrement></property>
   
    <!定義在從數據庫獲取新連接失敗後重復嘗試的次數Default: >
   
    <property name=acquireRetryAttempts></property>
   
    <!兩次連接中間隔時間單位毫秒Default: >
   
    <property name=acquireRetryDelay></property>
   
    <!連接關閉時默認將所有未提交的操作回滾Default: false >
   
    <property name=autoCommitOnClose>false</property>
   
    <!cp將建一張名為Test的空表並使用其自帶的查詢語句進行測試如果定義了這個參數那麼屬性preferredTestQuery將被忽略你不能在這張Test表上進行任何操作它將只供cp測試   使用Default: null>
   
    <property name=automaticTestTable>Test</property>
   
    <!獲取連接失敗將會引起所有等待連接池來獲取連接的線程拋出異常但是數據源仍有效   保留並在下次調用getConnection()的時候繼續嘗試獲取連接如果設為true那麼在嘗試   獲取連接失敗後該數據源將申明已斷開並永久關閉Default: false>
   
    <property name=breakAfterAcquireFailure>false</property>
   
    <!當連接池用完時客戶端調用getConnection()後等待獲取新連接的時間超時後將拋出   SQLException如設為則無限期等待單位毫秒Default: >
   
    <property name=checkoutTimeout></property>
   
    <!通過實現ConnectionTester或QueryConnectionTester的類來測試連接類名需制定全路徑
   
    Default: commchangevcpimplDefaultConnectionTester>
   
    <property name=connectionTesterClassName></property>
   
    <!指定cp 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>
   
    <!秒檢查所有連接池中的空閒連接Default: >
   
    <property name=idleConnectionTestPeriod></property>
   
    <!初始化時獲取三個連接取值應在minPoolSize與maxPoolSize之間Default: >
   
    <property name=initialPoolSize></property>
   
    <!最大空閒時間秒內未使用則連接被丟棄若為則永不丟棄Default: >
   
    <property name=maxIdleTime></property>
   
    <!連接池中保留的最大連接數Default: >
   
    <property name=maxPoolSize></property>
   
    <!JDBC的標准參數用以控制數據源內加載的PreparedStatements數量但由於預緩存的statements   屬於單個connection而不是整個連接池所以設置這個參數需要考慮到多方面的因素
   
    如果maxStatements與maxStatementsPerConnection均為則緩存被關閉Default: >
   
    <property name=maxStatements></property>
   
    <!maxStatementsPerConnection定義了連接池內單個連接所擁有的最大緩存statements數Default: >
   
    <property name=maxStatementsPerConnection></property>
   
    <!cp是異步操作的緩慢的JDBC操作通過幫助進程完成擴展這些操作可以有效的提升性能
   
    通過多線程實現多個操作同時被執行Default: >
   
    <property name=numHelperThreads></property>
   
    <!當用戶調用getConnection()時使root用戶成為去獲取連接的用戶主要用於連接池連接非cp   的數據源時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=</property>
   
    <!用戶修改系統配置參數執行前最多等待Default: >
   
    <property name=propertyCycle></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>
   
    在Hibernate(spring管理)中的配置
   
    <bean id=dataSource class=commchangevcpComboPooledDataSource destroymethod=close>
   
    <property name=driverClass><value>oraclejdbcdriverOracleDriver</value></property>
   
    <property name=jdbcUrl><value>jdbc:oracle:thin:@localhost::Test</value></property>
   
    <property name=user><value>Kay</value></property>
   
    <property name=password><value>root</value></property>
   
    <!連接池中保留的最小連接數>
   
    <property name=minPoolSize value= />
   
    <!連接池中保留的最大連接數Default: >
   
    <property name=maxPoolSize value= />
   
    <!最大空閒時間秒內未使用則連接被丟棄若為則永不丟棄Default: >
   
    <property name=maxIdleTime value= />
   
    <!當連接池中的連接耗盡的時候cp一次同時獲取的連接數Default: >
   
    <property name=acquireIncrement value= />
   
    <property name=maxStatements value= />
   
    <property name=initialPoolSize value= />
   
    <!秒檢查所有連接池中的空閒連接Default: >
   
    <property name=idleConnectionTestPeriod value= />
   
    <!定義在從數據庫獲取新連接失敗後重復嘗試的次數Default: >
   
    <property name=acquireRetryAttempts value= />
   
    <property name=breakAfterAcquireFailure value=true />
   
    <property name=testConnectionOnCheckout value=false />
   
    </bean>


From:http://tw.wingwit.com/Article/program/Java/ky/201311/28773.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.