不管通過何種持久化技術
都必須通過數據連接訪問數據庫
在Spring中
數據連接是通過數據源獲得的
在以往的應用中
數據源一般是 Web應用服務器提供的
在Spring中
你不但可以通過JNDI獲取應用服務器的數據源
也可以直接在Spring容器中配置數據源
此外
你還可以通過代碼的方式創建一個數據源
以便進行無依賴的單元測試
配置一個數據源
Spring在第三方依賴包中包含了兩個數據源的實現類包
其一是Apache的DBCP
其二是 C
P
在此重點講講C
P
的配置
此後會更新DBCP
<c
p
config>
<default
config>
<!
當連接池中的連接耗盡的時候c
p
一次同時獲取的連接數
Default:
>
<property name=
acquireIncrement
>
</property>
<!
定義在從數據庫獲取新連接失敗後重復嘗試的次數
Default:
>
<property name=
acquireRetryAttempts
>
</property>
<!
兩次連接中間隔時間
單位毫秒
Default:
>
<property name=
acquireRetryDelay
>
</property>
<!
連接關閉時默認將所有未提交的操作回滾
Default: false
>
<property name=
autoCommitOnClose
>false</property>
<!
c
p
將建一張名為Test的空表
並使用其自帶的查詢語句進行測試
如果定義了這個參數那麼屬性preferredTestQuery將被忽略
你不能在這張Test表上進行任何操作
它將只供c
p
測試 使用
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: com
mchange
v
c
p
impl
DefaultConnectionTester
>
<property name=
connectionTesterClassName
></property>
<!
指定c
p
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>
<!
c
p
是異步操作的
緩慢的JDBC操作通過幫助進程完成
擴展這些操作可以有效的提升性能
通過多線程實現多個操作同時被執行
Default:
>
<property name=
numHelperThreads
>
</property>
<!
當用戶調用getConnection()時使root用戶成為去獲取連接的用戶
主要用於連接池連接非c
p
的數據源時
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=
com
mchange
v
c
p
ComboPooledDataSource
destroy
method=
close
>
<property name=
driverClass
><value>oracle
jdbc
driver
OracleDriver</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=
/>
<!
當連接池中的連接耗盡的時候c
p
一次同時獲取的連接數
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