通常狀況下都會在spring的配置文件中進行數據源的配置,爲了提升數據源的內存利用效率基本上都是會配置數據源鏈接池的。mysql
在講到鏈接池以前咱們先看一下數據源直接鏈接數據庫的配置,如下就是最簡單的jdbc直接鏈接數據庫的配置,它不會對咱們獲取鏈接、釋放鏈接等進行優化,就和咱們直接利用純jdbc操做數據庫同樣,每一次的鏈接數據庫、釋放數據庫鏈接都會消耗系統資源,若是用戶量很大的話,這顯然會消耗至關大的資源,因此通常上線運行的系統都是會已鏈接池的方式來優化處理數據源的。spring
<!-- 配置數據源dataSource jdbc方式鏈接數據源 --> <bean id="dataSource"class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <propertyname="driverClassName"value="com.mysql.jdbc.Driver"/> <property name="url"value="jdbc:mysql://localhost:3306/mydatabase" /> <propertyname="username" value="root"/> <propertyname="password" value="root"/> </bean>
通常而言,經常使用的數據庫鏈接池有DBCP,C3P0, proxool,另外還有一個出道遲一些可是性能比前面這3個又一許多的鏈接池BoneCp。sql
DBCP是apache組織的一個開源的鏈接池項目,不過如今好像已經中止維護了,聽說問題比較多,鏈接死鎖問題比較嚴重。數據庫
C3P0是hibernate官方指定的數據庫鏈接池工具,性能穩定,不過佔用資源相對較多。apache
Proxool聽說性能比從C3P0好一些,消耗資源也少。緩存
BoneCp鏈接池網上有測試數據顯示其運行效率能夠達到C3P0、Proxool的25倍,而且穩定性也不錯,因此被許多開發者推崇!可是要求jdk1.5+。安全
<!-- 配置數據源dataSource dbcp鏈接池方式鏈接數據源 --> <bean id="dataSource"class="org.apache.commons.dbcp.BasicDataSource"> <propertyname="url" value="jdbc:mysql://localhost:3306/mydatabase"/> <propertyname="driverClassName"value="com.mysql.jdbc.Dirver" /> <propertyname="username" value="root" /> <propertyname="password" value="root" /> <!--配置初始化大小、最小、最大--> <property name="initialSize"value="1"/> <propertyname="minIdle" value="1"/> <propertyname="maxActive" value="30"/> </bean>
druid做爲一名後起之秀,憑藉其出色的性能,也逐漸印入了你們的眼簾。工具
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"> <!-- 基本屬性 url、user、password --> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> <!-- 鏈接初始值,鏈接池啓動時建立的鏈接數量的初始值 --> <property name="initialSize" value="${ds.initialSize}"/> <!-- 最小空閒值.當空閒的鏈接數少於閥值時,鏈接池就會預申請去一些鏈接,以避免洪峯來時來不及申請 --> <property name="minIdle" value="${ds.minIdle}"/> <!--最大鏈接數據庫鏈接數,設置爲0時,表示沒有限制--> <property name="maxActive" value="${ds.maxActive}"/> <!-- 配置獲取鏈接等待超時的時間 --> <property name="maxWait" value="${ds.maxWait}"/> <!-- 配置間隔多久才進行一次檢測,檢測須要關閉的空閒鏈接,單位是毫秒 --> <property name="timeBetweenEvictionRunsMillis" value="${ds.timeBetweenEvictionRunsMillis}"/> <!-- 配置一個鏈接在池中最小生存的時間,單位是毫秒 --> <property name="minEvictableIdleTimeMillis" value="${ds.minEvictableIdleTimeMillis}"/> <!-- 用來檢測鏈接是否有效的sql,要求是一個查詢語句,若是validationQuery爲 null,testOnBorrow、testOnReturn、testWhileIdle都不起其做用。 --> <property name="validationQuery" value="SELECT 'x'"/> <!-- 建議配置爲true,不影響性能,而且保證安全性。申請鏈接的時候檢測,若是空閒時間大於 timeBetweenEvictionRunsMillis,執行validationQuery檢測鏈接是否有效。 --> <property name="testWhileIdle" value="true"/> <!-- 申請鏈接時執行validationQuery檢測鏈接是否有效,配置爲true會下降性能 --> <property name="testOnBorrow" value="false"/> <!-- 歸還鏈接時執行validationQuery檢測鏈接是否有效,配置爲true會下降性能 --> <property name="testOnReturn" value="false"/> <!-- 是否對已備語句進行池管理(布爾值),是否對PreparedStatement進行緩存 --> <property name="poolPreparedStatements" value="false"/> <property name="maxPoolPreparedStatementPerConnectionSize" value="20"/> <!-- 配置監控統計攔截的filters --> <property name="filters" value="stat"/> </bean>
druid配置參考:http://blog.csdn.net/yunnysunny/article/details/8657095 性能