浅谈各种数据库连接池
?
1.各種數(shù)據(jù)庫(kù)連接池
? ?開(kāi)源的免費(fèi)連接池:
? ? ? ? DBCP? C3P0? Proxool? Druid? Jakarta ?DDConnectionBroker? BoneCP
? ? ? ?XAPool? Primrose? SmartPool? MiniConnectionPoolManager?
? 商業(yè)的中間件連接池:
? ? ? ? weblogic的連接池?? websphere的連接池
?
2. 常用的連接池比較:
? ??DBCP可能是最常用的開(kāi)源連接池,常用的原因
? ? ? ?一是配置比較方便;
? ? ? ?二是很多開(kāi)源和tomcat的例子基本都是使用DBCP連接池。
? ? ? ?該連接池的基本功能都有,比如配置最大和最小的連接數(shù),連接等待時(shí)間等。
? ? 性能:在項(xiàng)目中測(cè)試,此連接池的持續(xù)運(yùn)行的穩(wěn)定性還是可以,但速度稍慢,
? ? ? ? ? ? 在高并發(fā)的壓力下穩(wěn)定性有所下降,不提供連接池監(jiān)控。
?
? ??C3P0也是常用的一款開(kāi)源的連接池,在開(kāi)發(fā)中用的也比較多,基本功能齊全。
? ? 性能:在項(xiàng)目中測(cè)試,發(fā)現(xiàn)此連接池的持續(xù)運(yùn)行的穩(wěn)定性相當(dāng)不錯(cuò),
? ? ? ? ? ? 在高并發(fā)的壓力下穩(wěn)定性也有一定的保證,不提供連接池監(jiān)控
?
? ??Proxool這個(gè)連接池可能較少有人使用,但其提供連接池監(jiān)控也有一定的知名度,基本功能齊全。
? ? 性能:在項(xiàng)目中測(cè)試,此連接池的持續(xù)運(yùn)行穩(wěn)定性有一定的問(wèn)題,但是因?yàn)樗邆浔O(jiān)控功能,
? ? ? ? ? ? 很多時(shí)候會(huì)用在開(kāi)發(fā)測(cè)試的階段,有助于確定是否有連接沒(méi)有被關(guān)掉等來(lái)排除代碼的一些性能問(wèn)題。
?
? ?上面的三種都是開(kāi)源的連接池的比較,如果有機(jī)會(huì)使用商業(yè)的中間件連接池的話,開(kāi)源的可以直接忽略掉,
? ?因?yàn)榛ㄥX(qián)的東西和免費(fèi)的東西完全不在一個(gè)量級(jí)。
? ?簡(jiǎn)單的說(shuō)下weblogic連接池,基本配置可以在網(wǎng)上查,這里說(shuō)下weblogic連接池Test Reserved Connections
? (對(duì)取得的連接進(jìn)行測(cè)試)和Test Released Connections(對(duì)釋放的連接進(jìn)行測(cè)試)這兩個(gè)選項(xiàng),有時(shí)候在系統(tǒng)
? 壓力大的時(shí)候會(huì)出現(xiàn)連接失效的異常,使用該連接池就會(huì)避免這個(gè)問(wèn)題,因?yàn)門(mén)est Reserved Connections和
? Test Released Connections在每次連接和釋放的時(shí)候都會(huì)幫我們先測(cè)試,一旦檢查?到連接是無(wú)效的他會(huì)廢棄掉
? 還給數(shù)據(jù)庫(kù),只給你有效的。
? ?性能:在具體項(xiàng)目應(yīng)用中,此連接池的持續(xù)運(yùn)行的穩(wěn)定性強(qiáng),在高并發(fā)的壓力下性能也相當(dāng)優(yōu)秀,
? ? ? ? ? ?在一些異常情況下連接池里的連接也能夠及時(shí)釋放。連接池監(jiān)控一目了然,及時(shí)到位。
3.Druid數(shù)據(jù)庫(kù)連接池
? ?這里重點(diǎn)介紹下Druid連接池的配置和使用,Druid 是阿里的一款數(shù)據(jù)庫(kù)連接池,據(jù)阿里介紹,Druid?是目前開(kāi)源
? ?中最好的連接池,在功能,性能,可擴(kuò)展性方面遠(yuǎn)勝于其他的數(shù)據(jù)庫(kù)連接池,并且Druid?已經(jīng)部署了?超過(guò)7000個(gè)
? ?阿里應(yīng)用,經(jīng)過(guò)了長(zhǎng)時(shí)間生產(chǎn)環(huán)境大規(guī)模部署的嚴(yán)苛考驗(yàn) ,這話有沒(méi)有水分很難說(shuō),但確實(shí)有它的優(yōu)點(diǎn):
下載 druid-0.2.20.jar http://download.csdn.net/detail/wind520/5670085
?在web.xml中配置上下面這段,就可以實(shí)時(shí)查看連接池使用情況
<filter>
<filter-name>DruidWebStatFilter</filter-name>
<filter-class>com.alibaba.druid.support.http.WebStatFilter</filter-class>
<init-param>
<param-name>exclusions</param-name>
<param-value>/static/*,*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>DruidWebStatFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>DruidStatView</servlet-name>
<servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DruidStatView</servlet-name>
<url-pattern>/druid/*</url-pattern>
</servlet-mapping>
?
datasource.xml中配置
<bean name="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
init-method="init" destroy-method="close">
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
<!-- initialSize默認(rèn)0:初始化時(shí)建立物理連接的個(gè)數(shù) -->
<property name="initialSize" value="${druid.initialSize}" />
<!-- maxActive默認(rèn)8:最大連接池?cái)?shù)量 -->
<property name="maxActive" value="${druid.maxActive}" />
<!-- minIdle默認(rèn)8:最小連接池?cái)?shù)量 -->
<property name="minIdle" value="${druid.minIdle}" />
<property name="maxWait" value="${druid.maxWait}" />
<property name="validationQuery" value="${validationQuery}" />
<property name="testOnBorrow" value="${druid.testOnBorrow}" />
<property name="testOnReturn" value="${druid.testOnReturn}" />
<property name="testWhileIdle" value="${druid.testWhileIdle}" />
<property name="timeBetweenEvictionRunsMillis" value="${druid.timeBetweenEvictionRunsMillis}" />
<!-- minEvictableIdleTimeMillis:配置一個(gè)連接在池中最小生存的時(shí)間,單位是毫秒 -->
<property name="minEvictableIdleTimeMillis" value="${druid.minEvictableIdleTimeMillis}" />
<!-- 當(dāng)發(fā)生連接泄漏時(shí),使用RemoveAbandanded相關(guān)配置,用來(lái)關(guān)閉長(zhǎng)時(shí)間不使用的連接。 -->
<property name="removeAbandoned" value="${druid.removeAbandoned}" />
<!-- removeAbandonedTimeout:單位秒 -->
<property name="removeAbandonedTimeout" value="${druid.removeAbandonedTimeout}" />
<!-- 關(guān)閉abanded連接時(shí)輸出錯(cuò)誤日志 -->
<property name="logAbandoned" value="${druid.logAbandoned}" />
<property name="filters" value="${druid.filters}" />
</bean>
轉(zhuǎn)載于:https://www.cnblogs.com/fyboke/p/6245951.html
總結(jié)
以上是生活随笔為你收集整理的浅谈各种数据库连接池的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: CentOS系统下docker的安装与卸
- 下一篇: .net core ef mysql 的