国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

BasicDataSource連接池使用

2019-11-09 13:34:13
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

最近使用這類連接池發(fā)現(xiàn)有問題,當(dāng)鏈接一個(gè)數(shù)據(jù)庫(kù)如果數(shù)據(jù)庫(kù)端異常或重啟,就會(huì)出現(xiàn)提示鏈接數(shù)據(jù)庫(kù)異常的信息。

所說(shuō)報(bào)這樣的錯(cuò)誤,但是不影響程序的正常運(yùn)行,所以一開始,忽略了Communications link failure,一直在the error occurred while setting parameters中找原因,以為是mapper.xml中jdbcType參數(shù)類型的問題,其實(shí)不是,犯了一個(gè)方向性錯(cuò)誤

這個(gè)問題出現(xiàn)的情況,是在程序重啟,第一次訪問的時(shí)候出現(xiàn)的,接下來(lái)的訪問就沒有這個(gè)問題,其實(shí),這就是數(shù)據(jù)庫(kù)連接池的問題了

下面粘貼下我配置的datasource:

<bean id="uas.dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">		<PRoperty name="driverClassName" value="${jdbc.dataSource.driverClassName}"></property>		<property name="initialSize" value="${jdbc.dataSource.initialSize}"></property>		<property name="maxActive" value="${jdbc.dataSource.maxActive}"></property>		<property name="maxIdle" value="${jdbc.dataSource.maxIdle}"></property>		<property name="maxWait" value="${jdbc.dataSource.maxWait}"></property>		<property name="minIdle" value="${jdbc.dataSource.minIdle}"></property>		<property name="timeBetweenEvictionRunsMillis" value="${jdbc.dataSource.timeBetweenEvictionRunsMillis}"></property>		<property name="minEvictableIdleTimeMillis" value="${jdbc.dataSource.minEvictableIdleTimeMillis}"></property>		<property name="url" value="${jdbc.uasdb.url}"></property>		<property name="username" value="${jdbc.uasdb.username}"></property>		<property name="passWord" value="${jdbc.uasdb.password}"></property>			</bean>可以看出,我在配置中并沒有配置validationQuery的屬性,此屬性的作用是:用來(lái)檢測(cè)連接是否有效的sql,要求是一個(gè)查詢語(yǔ)句。如果validationQuery為null,testOnBorrow、testOnReturn、testWhileIdle都不會(huì)其作用。

由于沒有配置validationQuery,在重啟之后,初次訪問數(shù)據(jù)庫(kù)時(shí),連接池沒有該連接,就會(huì)報(bào)上述錯(cuò)誤,隨后連接池重新創(chuàng)建連接,在接下來(lái)的訪問中,便不再報(bào)錯(cuò)。

既然這里遇到了 BasicDataSource連接池,那么下面也總結(jié)下 BasicDataSource連接池的屬性配置以及每個(gè)屬性的作用

!-- 配置初始化大小、最小、最大 -->          <property name="initialSize" value="1" />          <property name="minIdle" value="1" />          <property name="maxActive" value="20" />            <!-- 配置獲取連接等待超時(shí)的時(shí)間 -->          <property name="maxWait" value="60000" />          <!-- 配置間隔多久才進(jìn)行一次檢測(cè),檢測(cè)需要關(guān)閉的空閑連接,單位是毫秒 -->          <property name="timeBetweenEvictionRunsMillis" value="60000" />          <!-- 配置一個(gè)連接在池中最小生存的時(shí)間,單位是毫秒 -->          <property name="minEvictableIdleTimeMillis" value="300000" />            <property name="validationQuery" value="SELECT * from table" />//檢測(cè)時(shí)候用到的語(yǔ)句,隨便寫一條即可          <!--是否要進(jìn)行檢測(cè)-->          <property name="testWhileIdle" value="true" />          <!--是否在數(shù)據(jù)庫(kù)連接請(qǐng)求量大的時(shí)候,如總數(shù)50,當(dāng)前已請(qǐng)求了49個(gè),所剩不多了,檢測(cè)那些執(zhí)行時(shí)間久的連接-->          <property name="removeAbandoned" value="true"/>          <!--每次檢測(cè)時(shí),需要檢測(cè)多少個(gè)數(shù)據(jù)連接,一般設(shè)置為與最大連接數(shù)一樣,這樣就可以檢測(cè)完所有的連接-->          <property name="numTestsPerEvictionRun" value="20"/>          <!--申請(qǐng)連接時(shí)執(zhí)行validationQuery檢測(cè)連接是否有效,做了這個(gè)配置會(huì)降低性能,保險(xiǎn)起見還是檢測(cè)吧-->          <property name="testOnBorrow" value="true" />          <!--歸還連接時(shí)執(zhí)行validationQuery檢測(cè)連接是否有效-->          <property name="testOnReturn" value="true" /> 

屬性功能:

配置

缺省值

說(shuō)明

name

 

配置這個(gè)屬性的意義在于,如果存在多個(gè)數(shù)據(jù)源,監(jiān)控的時(shí)候可以通過(guò)名字來(lái)區(qū)分開來(lái)。如果沒有配置,將會(huì)生成一個(gè)名字,格式是:"DataSource-" + System.identityHashCode(this)

jdbcUrl

 

連接數(shù)據(jù)庫(kù)的url,不同數(shù)據(jù)庫(kù)不一樣。例如:MySQL : jdbc:mysql://10.20.153.104:3306/druid2 Oracle : jdbc:oracle:thin:@10.20.149.85:1521:ocnauto

username

 

連接數(shù)據(jù)庫(kù)的用戶名

password

 

連接數(shù)據(jù)庫(kù)的密碼。如果你不希望密碼直接寫在配置文件中,可以使用ConfigFilter。詳細(xì)看這里:https://github.com/alibaba/druid/wiki/%E4%BD%BF%E7%94%A8ConfigFilter

driverClassName

根據(jù)url自動(dòng)識(shí)別

這一項(xiàng)可配可不配,如果不配置druid會(huì)根據(jù)url自動(dòng)識(shí)別dbType,然后選擇相應(yīng)的driverClassName

initialSize

0

初始化時(shí)建立物理連接的個(gè)數(shù)。初始化發(fā)生在顯示調(diào)用init方法,或者第一次getConnection時(shí)

maxActive

8

最大連接池?cái)?shù)量

maxIdle

8

已經(jīng)不再使用,配置了也沒效果

minIdle

 

最小連接池?cái)?shù)量

maxWait

 

獲取連接時(shí)最大等待時(shí)間,單位毫秒。配置了maxWait之后,缺省啟用公平鎖,并發(fā)效率會(huì)有所下降,如果需要可以通過(guò)配置useUnfairLock屬性為true使用非公平鎖。

poolPreparedStatements

false

是否緩存preparedStatement,也就是PSCache。PSCache對(duì)支持游標(biāo)的數(shù)據(jù)庫(kù)性能提升巨大,比如說(shuō)oracle。在mysql5.5以下的版本中沒有PSCache功能,建議關(guān)閉掉。5.5及以上版本有PSCache,建議開啟。

maxOpenPreparedStatements

-1

要啟用PSCache,必須配置大于0,當(dāng)大于0時(shí),poolPreparedStatements自動(dòng)觸發(fā)修改為true。在Druid中,不會(huì)存在Oracle下PSCache占用內(nèi)存過(guò)多的問題,可以把這個(gè)數(shù)值配置大一些,比如說(shuō)100

validationQuery

 

用來(lái)檢測(cè)連接是否有效的sql,要求是一個(gè)查詢語(yǔ)句。如果validationQuery為null,testOnBorrow、testOnReturn、testWhileIdle都不會(huì)其作用。

testOnBorrow

true

申請(qǐng)連接時(shí)執(zhí)行validationQuery檢測(cè)連接是否有效,做了這個(gè)配置會(huì)降低性能。

testOnReturn

false

歸還連接時(shí)執(zhí)行validationQuery檢測(cè)連接是否有效,做了這個(gè)配置會(huì)降低性能

testWhileIdle

false

建議配置為true,不影響性能,并且保證安全性。申請(qǐng)連接的時(shí)候檢測(cè),如果空閑時(shí)間大于timeBetweenEvictionRunsMillis,執(zhí)行validationQuery檢測(cè)連接是否有效。

timeBetweenEvictionRunsMillis

 

有兩個(gè)含義:1) Destroy線程會(huì)檢測(cè)連接的間隔時(shí)間2) testWhileIdle的判斷依據(jù),詳細(xì)看testWhileIdle屬性的說(shuō)明

numTestsPerEvictionRun

 

不再使用,一個(gè)DruidDataSource只支持一個(gè)EvictionRun

minEvictableIdleTimeMillis

 

 

connectionInitSqls

 

物理連接初始化的時(shí)候執(zhí)行的sql

exceptionSorter

根據(jù)dbType自動(dòng)識(shí)別

當(dāng)數(shù)據(jù)庫(kù)拋出一些不可恢復(fù)的異常時(shí),拋棄連接

filters

 

屬性類型是字符串,通過(guò)別名的方式配置擴(kuò)展插件,常用的插件有:監(jiān)控統(tǒng)計(jì)用的filter:stat 日志用的filter:log4j 防御sql注入的filter:wall

proxyFilters

 

類型是List<com.alibaba.druid.filter.Filter>,如果同時(shí)配置了filters和proxyFilters,是組合關(guān)系,并非替換關(guān)系


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 黎平县| 玉树县| 普安县| 南宫市| 珲春市| 曲麻莱县| 南木林县| 岐山县| 池州市| 渝中区| 台北县| 高雄市| 抚顺市| 双牌县| 三穗县| 临沧市| 巫溪县| 泗水县| 唐河县| 漳州市| 上杭县| 都江堰市| 普兰店市| 讷河市| 洛川县| 亳州市| 平原县| 壤塘县| 南部县| 多伦县| 台安县| 花莲县| 崇明县| 呼伦贝尔市| 唐河县| 涞水县| 夏邑县| 龙门县| 翁牛特旗| 枝江市| 会昌县|