在Spring的配置文件applicationContext-mybatis.xml中配置數據源對象中,配置SQL心跳包及參數含義

在Spring的配置文件applicationContext-mybatis.xml中配置數據源對象

    <!-- 讀取數據庫配置文件 -->
    <context:property-placeholder location="classpath:database.properties"/>    
    <!-- JNDI獲取數據源(使用dbcp連接池) -->  
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" scope="singleton">
            <property name="driverClassName" value="${driver}" />  
            <property name="url" value="${url}" />  
            <property name="username" value="${user}" />  
            <property name="password" value="${password}" />
            <property name="initialSize" value="${initialSize}"/>
            <property name="maxActive" value="${maxActive}"/>
            <property name="maxIdle" value="${maxIdle}"/>
            <property name="minIdle" value="${minIdle}"/>
            <property name="maxWait" value="${maxWait}"/>
            <property name="removeAbandonedTimeout" value="${removeAbandonedTimeout}"/>
            <property name="removeAbandoned" value="${removeAbandoned}"/>
            <!-- sql 心跳 -->
            <property name= "testWhileIdle" value="true"/>
            <property name= "testOnBorrow" value="false"/>
            <property name= "testOnReturn" value="false"/>
            <property name= "validationQuery" value="select 1"/>
            <property name= "timeBetweenEvictionRunsMillis" value="60000"/>
            <property name= "numTestsPerEvictionRun" value="${maxActive}"/>
    </bean>
  • initalSize:數據庫連接池在初始化連接時,第一次就要創建的連接個數,默認爲0。
  • maxActive:定義連接池中同時連接的最大連接數,默認連接爲8。若設置爲50,則表示可以支持單機併發50左右的處理能力。
  • maxIdle:定義連接池中可允許的最大空閒連接數,默認連接爲8。超過設置的空閒連接數將被釋放掉,若設置爲負數則表示不受限制。
  • minIdle:定義連接池中最小連接數,默認連接數爲0。低於該數值的連接池將會創建新的連接。
    注意:maxIdle不能設置太小,因爲在高負載的情況下,連接的打開時間比關閉時間要快,會引起連接池中空閒連接個數上升並超過最大的空閒數,從而造成連接頻繁的銷燬和創建,導致性能下降,所以具體設置要根據業務量來定義。
    minIdle一般情況下設置的數值越接近maxIdle,系統性能越好,因爲連接的創建和銷燬都需要消耗系統資源。這個值也不能設置得太大,否則服務器在很空閒的時候,會創建minIdle個數的連接。
  • maxWait:定義最大等待連接時間,單位爲ms。即當連接池中沒有可用連接時。連接池需要等待的連接釋放的最大時間。若等待時間超過這個設置時間,則會拋出異常,若該值設置爲-1,則表示無限等待下去。該默認值爲無限等待。配置該數值可以避免因線程池不夠而導致的請求被無限掛起和連接不可用問題。
  • removeAbandoned:定義該配置項的作用是告訴連接池是否開啓無用連接回收的機制,默認爲false,這裏調整爲true。
  • removeAbandonedTimeout:當開啓了無用連接池回收的機制之後,配置該配置項,可以控制連接池在超出配置的時間後回收沒有用的連接,這個配置默認值爲300秒,建議稍微少一點,儘量快速的回收沒有用的連接。
  • testWhileIdle:定義開啓Evict的定時校驗循環校驗)
  • testBetweenEvictionRunsMillis:定義Evict時間間隔,單位爲毫秒,此處設值爲6000,即1分鐘,這個值大於0纔會開啓Evict。
  • testOnBorrow:定義在進行brrowObject處理是,對拿到的連接是否進行校驗,false爲不校驗,默認爲false。
  • testOnReturn:定義在returnObject時,對返回的連接是否進行校驗,false爲不校驗,默認爲false。
  • validationQuery:定義校驗使用的SQL語句,跟MySQL簡單通信下,校驗連接是否有效。注意:該SQL語句不能太複雜,複雜的校驗SQL會嚴重影響性能。
  • numTestsPerEvictionRun:定義每次校驗連接的數量。一般情況下,該值會和maxActive大小一樣,每次可以校驗所有的連接。
    注意: 配置SQL心跳指在校驗連接的同時,解決數據庫重新連接的問題,從而確保連接池中的連接是真實有效的。舉例說明:
    當系統現在在正常運行,此時若由於某種原因,需將數據庫停掉(或者突發情況下,數據庫服務器直接宕機),那麼此時連接池的所有連接都已經無效,整個系統功能將不可用。
    需要對數據庫服務器和應用服務器進行重啓操作,才能正常訪問應用系統,使用系統功能。所以當有了SQL心跳包的配置後,當數據庫重啓後系統不用重啓。
    另外,由於MySQL數據庫默認有8個小時的時間內沒有連接動態(即沒有請求數據),MySQL會主動斷掉所有的連接,此時應用系統是不可用的,若想恢復必須重啓應用程序,重新建立連接,讓它主動去請求MySQL。
    上述的testWhileIdle、testOnBorrow、testOnReturn是連接池提供的幾種校驗機制,通過外部鉤子的方式回調。dbcp連接池使用validationQuery來定義數據庫連接校驗查詢,此處使用”select 1”簡單的校驗SQL來校驗連接池。
    整個校驗的過程:當開啓了whileIdle校驗後,相當於打開了一個回收(Evict:依法回收)的計時器,會通過定時器的時間不停地去校驗,定時對連接進行校驗。對無效的連接進行關閉後,適當建立連接,保證最小的minIdle的連接數。既然開啓了定時,就需要定義時間輪詢,那麼testBetweenEvictionRunsMillis配置就是定義了Evict的定時時間間隔。

數據源配置文件(database.properties)

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/smbms?useUnicode=true&characterEncoding=utf-8
user=root
password=root
minIdle=45
maxIdle=50
initialSize=5
maxActive=100
maxWait=100
removeAbandonedTimeout=180
removeAbandoned=true
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章