Spring的資料來源配置 DBCP、C3P0、BoneCP
Spring建議使用的資料來源有Apache的DBCP,和C3P0。
如果使用高效能的應用伺服器(WebLogic\WebSphere),可以使用JNDI資料來源。
1. Apache-DBCP
DBCP依賴commons-pool物件池。所以需要的jar包有:commons-dbcp.jar,commons-pool.jar
DBCP的BasicDataSource提供了close()方法,所以在XML配置檔案中須要指定destroy-method="close",以便Spring關閉時能正常關閉資料來源。
新的DBCP 1.4效能不錯,相比1.2有了很大提高。
基本引數 :
引數 | 預設值 | 描述 |
username | 無 | 傳遞給JDBC驅動的用於建立連線的使用者名稱 |
password | 無 | 傳遞給JDBC驅動的用於建立連線的密碼 |
url | 無 | 傳遞給JDBC驅動的用於建立連線的URL |
driverClassName | 無 | 使用的JDBC驅動的完整有效的java 類名 |
connectionProperties | 無 | 當建立新連線時被髮送給JDBC驅動的連線引數,格式必須是 [propertyName=property;]* 注意:引數user/password將被明確傳遞,所以不需要包括在這裡。 |
事務相關的屬性:
引數 | 預設值 | 描述 |
defaultAutoCommit | true | 連線池建立的連線的預設的auto-commit狀態 |
defaultReadOnly | driver default |
連線池建立的連線的預設的read-only狀態. 如果沒有設定則setReadOnly方法將不會被呼叫. (某些驅動不支援只讀模式,比如:Informix)
|
defaultTransactionIsolation | driver default |
連線池建立的連線的預設的TransactionIsolation狀態. 下面列表當中的某一個: (參考javadoc)
|
defaultCatalog | 連線池建立的連線的預設的catalog |
連線資料相關引數:
引數 |
預設值 |
描述 |
initialSize |
0 |
初始化連線:連線池啟動時建立的初始化連線數量,1.2版本後支援 |
maxActive |
8 |
最大活動連線:連線池在同一時間能夠分配的最大活動連線的數量, 如果設定為非正數則表示不限制 |
maxIdle |
8 |
最大空閒連線:連線池中容許保持空閒狀態的最大連線數量,超過的空閒連線將被釋放,如果設定為負數表示不限制 |
minIdle |
0 |
最小空閒連線:連線池中容許保持空閒狀態的最小連線數量,低於這個數量將建立新的連線,如果設定為0則不建立 |
maxWait |
無限 |
最大等待時間:當沒有可用連線時,連線池等待連線被歸還的最大時間(以毫秒計數),超過時間則丟擲異常,如果設定為-1表示無限等待 |
連線健康情況:
引數 |
預設值 |
描述 |
validationQuery |
|
SQL查詢,用來驗證從連線池取出的連線,在將連線返回給呼叫者之前.如果指定,則查詢必須是一個SQL SELECT並且必須返回至少一行記錄 |
testOnBorrow |
true |
指明是否在從池中取出連線前進行檢驗,如果檢驗失敗,則從池中去除連線並嘗試取出另一個. |
testOnReturn |
false |
指明是否在歸還到池中前進行檢驗 |
testWhileIdle |
false |
指明連線是否被空閒連線回收器(如果有)進行檢驗.如果檢測失敗,則連線將被從池中去除. |
timeBetweenEvictionRunsMillis |
-1 |
在空閒連線回收器執行緒執行期間休眠的時間值,以毫秒為單位. 如果設定為非正數,則不執行空閒連線回收器執行緒 |
numTestsPerEvictionRun |
3 |
在每次空閒連線回收器執行緒(如果有)執行時檢查的連線數量 |
minEvictableIdleTimeMillis |
1000 * 60 * 30 |
連線在池中保持空閒而不被空閒連線回收器執行緒(如果有)回收的最小時間值,單位毫秒 |
快取語句:
引數 |
預設值 |
描述 |
poolPreparedStatements |
false |
開啟池的prepared statement 池功能 |
maxOpenPreparedStatements |
不限制 |
statement池能夠同時分配的開啟的statements的最大數量, 如果設定為0表示不限制 |
這裡可以開啟PreparedStatements池. 當開啟時, 將為每個連線建立一個statement池,並且被下面方法建立的PreparedStatements將被快取起來:
* public PreparedStatement prepareStatement(String sql)
* public PreparedStatement prepareStatement(String sql, int resultSetType, int resultSetConcurrency)
注意: 確認連線還有剩餘資源可以留給其他statement
引數 |
預設值 |
描述 |
accessToUnderlyingConnectionAllowed |
false |
控制PoolGuard是否容許獲取底層連線 |
如果容許則可以使用下面的方式來獲取底層連線:
Connection conn = ds.getConnection();
Connection dconn = ((DelegatingConnection) conn).getInnermostDelegate();
...
conn.close();
預設false不開啟, 這是一個有潛在危險的功能, 不適當的編碼會造成傷害.(關閉底層連線或者在守護連線已經關閉的情況下繼續使用它).請謹慎使用,並且僅當需要直接訪問驅動的特定功能時使用.
注意: 不要關閉底層連線, 只能關閉前面的那個.
連線洩漏回收引數:
引數 |
預設值 |
描述 |
removeAbandoned |
false |
標 記是否刪除洩露的連線,如果他們超過了removeAbandonedTimout的限制.如果設定為true, 連線被認為是被洩露並且可以被刪除,如果空閒時間超過removeAbandonedTimeout. 設定為true可以為寫法糟糕的沒有關閉連線的程式修復資料庫連線. |
removeAbandonedTimeout |
300 |
洩露的連線可以被刪除的超時值, 單位秒 |
logAbandoned |
false |
標記當Statement或連線被洩露時是否列印程式的stack traces日誌。被洩露的Statements和連線的日誌新增在每個連線開啟或者生成新的Statement,因為需要生成stack trace。 |
如果開啟"removeAbandoned",那麼連線在被認為洩露時可能被池回收. 這個機制在(getNumIdle() < 2) and (getNumActive() > getMaxActive() - 3)時被觸發.
舉例當maxActive=20, 活動連線為18,空閒連線為1時可以觸發"removeAbandoned".但是活動連線只有在沒有被使用的時間超過"removeAbandonedTimeout"時才被刪除,預設300秒.在resultset中游歷不被計算為被使用.
2. C3P0
<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="breakAfterAcquireFailure">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>
<!--初始化時獲取三個連線,取值應在minPoolSize與maxPoolSize
3.BoneCP 連線池
<!-- 資料來源 BoneCP 連線池 -->
<bean id="dataSource" class="com.jolbox.bonecp.BoneCPDataSource" destroy-method="close">
<property name="driverClass" value="oracle.jdbc.driver.OracleDriver" />
<property name="jdbcUrl" value="jdbc:oracle:thin:@192.168.0.6:1521:orcl" />
<property name="username" value="zfba"/>
<property name="password" value="zfba"/>
<property name="idleConnectionTestPeriod" value="60"/><!--檢查資料庫連線池中空閒連線的間隔時間,單位是分,預設值:240,如果要取消則設定為0-->
<property name="idleMaxAge" value="60"/><!--連線池中未使用的連結最大存活時間,單位是分,預設值:60,如果要永遠存活設定為0-->
<property name="maxConnectionsPerPartition" value="10"/><!--每個分割槽最大的連線數 -->
<property name="minConnectionsPerPartition" value="1"/><!--每個分割槽最小的連線數 -->
<property name="partitionCount" value="1"/><!--分割槽數,預設值2,最小1,推薦3-4,視應用而定 -->
<property name="acquireIncrement" value="2"/><!-- 當連線池中的連線耗盡的時候一次同時獲取的連線數。Default: 1 -->
<property name="statementsCacheSize" value="10"/><!--快取prepared statements的大小,預設值:0 -->
<property name="releaseHelperThreads" value="3"/><!--每個分割槽釋放連結助理程式的數量,預設值:3 -->
</bean>
4.JNDI資料來源
<bean id="datasource" class="org.springframework.jndiObjectFactoryBean" p:jndiName="java:comp/env/jdbc/名稱"/>
轉載: http://elf8848.iteye.com/blog/337981
相關文章
- spring資料來源c3p0配置Spring
- Spring DataSource>DBCP & C3P0Spring
- 資料庫連線池優化配置(druid,dbcp,c3p0)資料庫優化UI
- Spring多資料來源配置Spring
- Spring配置多資料來源Spring
- 常用資料庫連線池 (DBCP、c3p0、Druid) 配置說明資料庫UI
- ssh使用tomcat中配置好的c3p0資料來源Tomcat
- Spring Boot 配置多資料來源Spring Boot
- Spring Boot 多資料來源配置Spring Boot
- Spring全家桶--單資料來源的配置Spring
- Spring系列之多個資料來源配置Spring
- Spring系列 之資料來源的配置 資料庫 資料來源 連線池的區別Spring資料庫
- spring 配置多個資料來源的檔案Spring
- 一個小應用的dbcp和c3p0配置例項
- Spring 資料來源配置與應用薦Spring
- DBCP 資料連線池的配置和使用
- 使用Spring Boot配置JNDI資料來源 -Roy教程Spring Boot
- 使用Spring Boot配置多個資料來源 - UdithSpring Boot
- Spring Boot 原始碼分析 資料來源 + Mybatis 配置Spring Boot原始碼MyBatis
- Spring+MyBatis多資料來源配置實現SpringMyBatis
- Spring Boot 動態資料來源(Spring 註解資料來源)Spring Boot
- Spring boot 如何快速的配置多個 Redis 資料來源Spring BootRedis
- 基於xml的Spring多資料來源配置和使用XMLSpring
- Spring-Boot 多資料來源配置+動態資料來源切換+多資料來源事物配置實現主從資料庫儲存分離Springboot資料庫
- 基於Spring Boot與Spring Data JPA的多資料來源配置Spring Boot
- jndi配置資料來源
- 多資料來源配置
- 【教程】Spring+Mybatis環境配置多資料來源SpringMyBatis
- 怎樣在spring中配置proxool資料來源?薦Spring
- 基於註解的Spring多資料來源配置和使用Spring
- MyBatis配置多資料來源MyBatis
- web 配置多資料來源Web
- tomcat配置資料來源Tomcat
- Spring Boot 2.x基礎教程:Spring Data JPA的多資料來源配置Spring Boot
- Spring Boot 2.x基礎教程:MyBatis的多資料來源配置Spring BootMyBatis
- 談一談 Spring-Mybatis 在多資料來源配置上的坑SpringMyBatis
- 談一談Spring-Mybatis在多資料來源配置上的坑SpringMyBatis
- weblogic配置JDBC資料來源WebJDBC