99偷拍视频精品区一区二,口述久久久久久久久久久久,国产精品夫妇激情啪发布,成人永久免费网站在线观看,国产精品高清免费在线,青青草在线观看视频观看,久久久久久国产一区,天天婷婷久久18禁,日韩动漫av在线播放直播

數(shù)據(jù)庫(kù)連接池dbcp的原理及配置是怎樣的-創(chuàng)新互聯(lián)

這篇文章將為大家詳細(xì)講解有關(guān)數(shù)據(jù)庫(kù)連接池dbcp的原理及配置是怎樣的,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。

創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括東寧網(wǎng)站建設(shè)、東寧網(wǎng)站制作、東寧網(wǎng)頁(yè)制作以及東寧網(wǎng)絡(luò)營(yíng)銷(xiāo)策劃等。多年來(lái),我們專(zhuān)注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,東寧網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶(hù)以成都為中心已經(jīng)輻射到東寧省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶(hù)的支持與信任!

1. 簡(jiǎn)介

DBCP(DataBase Connection Pool),數(shù)據(jù)庫(kù)連接池。是 apache 上的一個(gè) java 連接池項(xiàng)目,也是 tomcat 使用的連接池組件。單獨(dú)使用dbcp需要3個(gè)包:common-dbcp.jar,common-pool.jar,common-collections.jar由于建立數(shù)據(jù)庫(kù)連接是一個(gè)非常耗時(shí)耗資源的行為,所以通過(guò)連接池預(yù)先同數(shù)據(jù)庫(kù)建立一些連接,放在內(nèi)存中,應(yīng)用程序需要建立數(shù)據(jù)庫(kù)連接時(shí)直接到連接池中申請(qǐng)一個(gè)就行,用完后再放回去。

dbcp提供了數(shù)據(jù)庫(kù)連接池可以在spring,iBatis,hibernate中調(diào)用dbcp完成數(shù)據(jù)庫(kù)連接,框架一般都提供了dbcp連接的方法;

tomcat中也提供了dbcp的jndi設(shè)置方法,也可以不在框架中使用dbcp,單獨(dú)使用dbcp需要3個(gè)包:common-dbcp.jar,common-pool.jar,common-collections.jar

2.連接池扼要

JDBC是一套通用的Java語(yǔ)言與多種數(shù)據(jù)庫(kù)(文件)通訊的標(biāo)準(zhǔn)API。大部分針對(duì)數(shù)據(jù)庫(kù)服務(wù)器(例如Oracle, MySQL等等)的JDBC實(shí)現(xiàn)都是基于TCP/IP連接的客戶(hù)端-服務(wù)器端通訊方式。

當(dāng)我們需要執(zhí)行一個(gè)數(shù)據(jù)庫(kù)操作時(shí),有下面三步:

1. 客戶(hù)端與服務(wù)器之間建立一個(gè)數(shù)據(jù)庫(kù)連接

2. 執(zhí)行某種數(shù)據(jù)庫(kù)操作

3. 斷開(kāi)連接

如果每次處理都要走上面的三步,則應(yīng)用程序與數(shù)據(jù)庫(kù)服務(wù)器都要將大量的時(shí)間和資源消耗在數(shù)據(jù)連接的斷開(kāi)與建立上。對(duì)于某些數(shù)據(jù)庫(kù)系統(tǒng),一個(gè)數(shù)據(jù)庫(kù)連接就是一個(gè)進(jìn)程,而且數(shù)據(jù)庫(kù)連接通常要占用不少資源,如排序區(qū)/Join區(qū)等等。對(duì)于并發(fā)較大的系統(tǒng),建立一次連接然后緩存起來(lái)連續(xù)使用,直到程序結(jié)束等情況下再釋放連接,就能夠?qū)⑾到y(tǒng)資源集中在對(duì)數(shù)據(jù)庫(kù)操作的處理上,從而大大提高性能。通常情況下將數(shù)據(jù)連接的建立和斷開(kāi)委托給一種能夠數(shù)據(jù)庫(kù)連接池的組件或服務(wù)進(jìn)行管理。而DBCP, C3p0, Proxool等都是常用的開(kāi)源的連接池組件。

就好像A公司在郊外,他們公司附近沒(méi)有出租車(chē)。如果A公司有人要出去辦事,他必須打電話(huà)給出租公司訂車(chē),用完車(chē)后他還要付賬報(bào)銷(xiāo)。 這樣每個(gè)人出去一趟都必須訂車(chē)、退車(chē)和報(bào)銷(xiāo)。員工的很多時(shí)間白白花費(fèi)在這上面了。于是A公司跟出租車(chē)公司定了一個(gè)合同,出租車(chē)公司給了他們一個(gè)車(chē)隊(duì)。要用車(chē)隨時(shí)去樓下找車(chē)隊(duì)就可以了,用完了也不必結(jié)帳,A公司統(tǒng)一跟出租車(chē)公司訂車(chē)和結(jié)帳。這個(gè)車(chē)隊(duì)就好比連接池,由公司(應(yīng)用程序)來(lái)統(tǒng)一向出租車(chē)公司(數(shù)據(jù)庫(kù)服務(wù)器)訂車(chē)(建立連接)和退車(chē)(關(guān)閉連接)。

3.DBCP的配置參數(shù)以及背后的原理

Commons-dbcp連接池的配置參數(shù)比較多,也比較復(fù)雜,主要分為

· Jdbc連接參數(shù)(username, password, url, driverClassName, connectionProperties )

· 事務(wù)處理參數(shù) (defaultAutoCommit, defaultReadOnly, defaultTransactionIsolation, defaultCatalog)

· 連接池參數(shù)(詳見(jiàn)下文)

· 連接池中鏈接存活性測(cè)試參數(shù)(詳見(jiàn)下文)

· 預(yù)處理查詢(xún)池化參數(shù)(poolPreparedStatements, maxOpenPreparedStatements)

· 丟棄失效鏈接相關(guān)參數(shù)(詳見(jiàn)下文)以及一個(gè)控制是否可以正常情況下處于訪(fǎng)問(wèn)連接池包裝下的底層JDBC鏈接參數(shù)(accessToUnderlyingConnectionAllowed)

其中Jdbc鏈接參數(shù)、事務(wù)處理都跟連接池關(guān)系不大,另預(yù)處理查詢(xún)池化參數(shù)本文不詳細(xì)敘述。有關(guān)commons-dbcp的詳細(xì)參數(shù)配置信息請(qǐng)參考官方文檔。

4.連接池的配置

再用車(chē)隊(duì)來(lái)比喻,出租車(chē)公司每提供一輛車(chē)給A公司,A公司肯定要付出一定費(fèi)用。這時(shí)候維持車(chē)隊(duì)的大小就很重要了,在項(xiàng)目少用車(chē)少的時(shí)候,車(chē)隊(duì)肯定要減少,不然很多空閑車(chē)輛也要付出成本;在項(xiàng)目多用車(chē)多的時(shí)候,肯定要擴(kuò)大車(chē)隊(duì),不然車(chē)不夠用,車(chē)隊(duì)忙不過(guò)來(lái)。A公司可以簡(jiǎn)單地設(shè)地兩個(gè)閥值來(lái)動(dòng)態(tài)調(diào)節(jié)車(chē)隊(duì)中空閑的車(chē)輛數(shù)目以滿(mǎn)足動(dòng)態(tài)需求,一個(gè)是最小空閑車(chē)輛數(shù)(最小空空閑連接數(shù)(minIdle),當(dāng)剩余的空車(chē)數(shù)目小于該數(shù)目時(shí),A公司就向出租車(chē)公司請(qǐng)求加入新車(chē)。 一個(gè)是較大空閑車(chē)輛數(shù)(maxIdle),當(dāng)剩余的車(chē)大于該數(shù)目時(shí),就將剛剛用用完的車(chē)還給出租車(chē)公司從而減少車(chē)隊(duì)數(shù)量。

另外,這家出租車(chē)公司可能要為多個(gè)客戶(hù)服務(wù),要考慮能夠提供給A公司的較大的車(chē)數(shù)量,不能超過(guò)某個(gè)數(shù)量(maxActive)。所以A公司想出租車(chē)申請(qǐng)新車(chē)時(shí)首先要看下當(dāng)前正在用的車(chē)輛數(shù)目是否超過(guò)了這個(gè)較大數(shù)目,如果沒(méi)有超過(guò)那就直接申請(qǐng)新車(chē),否則可以讓申請(qǐng)者(應(yīng)用程序中執(zhí)行請(qǐng)求的線(xiàn)程)等待 (maxWait<=0, 無(wú)限等待; maxWait>0 當(dāng)?shù)却龝r(shí)間超過(guò) maxWait時(shí),失敗)。

在連接池中,這幾個(gè)參數(shù)是十分重要的,官方的說(shuō)明如下,是我們調(diào)節(jié)系統(tǒng)性能時(shí)需要認(rèn)真考慮的值。


Parameter

Default

Description

initialSize

0

The initial number of connections that are created when the pool is started.

Since: 1.2
線(xiàn)程池啟動(dòng)時(shí)初始化的連接數(shù)

maxActive

8

The maximum number of active connections that can be allocated from this pool at the same time, or non-positive for no limit.
較大活動(dòng)連接數(shù),如果非正整數(shù),則不做限制。

maxIdle

8

The maximum number of connections that can remain idle in the pool, without extra ones being released, or negative for no limit.
較大空閑連接數(shù)。

minIdle

0

The minimum number of connections that can remain idle in the pool, without extra ones being created, or zero to create none.
最小空閑連接數(shù)。

maxWait

indefinitely

The maximum number of milliseconds that the pool will wait (when there are no available connections) for a connection to be returned before throwing an exception, or -1 to wait indefinitely.
(在沒(méi)有連接可用時(shí))連接池等待一個(gè)數(shù)據(jù)連接可用時(shí)的以毫秒計(jì)的較大等待時(shí)間,超時(shí)以后拋出異常, -1 則將無(wú)限等待

實(shí)際上,Dbcp 依賴(lài)于 commons-pool 來(lái)存儲(chǔ)連接對(duì)象。 BasicDataSource默認(rèn)使用GenericObjectPool來(lái)管理連接對(duì)象。除了請(qǐng)求的線(xiàn)程會(huì)在請(qǐng)求和返回連接過(guò)程中影響池中連接實(shí)例外,另有一個(gè)跑著GenericObjectPool.Evictor類(lèi)型 (implements Runnable) 的實(shí)例的線(xiàn)程,也會(huì)影響池中的數(shù)據(jù)庫(kù)連接。

5.使用注意點(diǎn)

1) 如果maxIdle 設(shè)置太低,在高負(fù)載系統(tǒng)中,連接的打開(kāi)時(shí)間比關(guān)閉的時(shí)間快,會(huì)引起連接池中的idle的個(gè)數(shù)上升超過(guò)maxIdle,造成頻繁的銷(xiāo)毀和創(chuàng)建,類(lèi)似于jvm參數(shù)中的Xmx設(shè)置。

2) minIdle,該參數(shù)越接近maxIdle,性能越好,因?yàn)檫B接的創(chuàng)建和銷(xiāo)毀,都是需要消耗資源的,但是不能太大,因?yàn)樵跈C(jī)器很空閑的時(shí)候,也會(huì)創(chuàng)建低于minIdle個(gè)數(shù)的連接,類(lèi)似于jvm參數(shù)中的Xms設(shè)置。

3) PreparedStatements會(huì)在數(shù)據(jù)庫(kù)中保持打開(kāi)的游標(biāo),這樣會(huì)造成一個(gè)連接超出數(shù)據(jù)庫(kù)游標(biāo)限制, 特別是當(dāng)maxOpenPreparedStatements 被設(shè)置成 default (unlimited),并且應(yīng)用在一個(gè)連接上創(chuàng)建了大量不同PreparedStatements時(shí),為了避免這個(gè)問(wèn)題, maxOpenPreparedStatements 應(yīng)該設(shè)置為一個(gè)小于數(shù)據(jù)庫(kù)在一個(gè)連接上允許打開(kāi)較大游標(biāo)數(shù)。

4) poolPreparedStatements,經(jīng)過(guò)測(cè)試,開(kāi)啟后的性能沒(méi)有關(guān)閉的好,或者相差不大,沒(méi)有本質(zhì)的提高。

5) 對(duì)性能影響比較大的兩個(gè)參數(shù):

testOnBorrow:這個(gè)默認(rèn)的之是true,對(duì)性能影響很大,因?yàn)槊看螐某刂薪璩鰧?duì)象時(shí)進(jìn)行一次驗(yàn)證,系統(tǒng)開(kāi)銷(xiāo)很大,實(shí)際測(cè)試中發(fā)現(xiàn),性能差距有7-10倍的樣子。

maxIdle:如果這個(gè)參數(shù)的值比maxActive低,在高負(fù)載的情況下就會(huì)產(chǎn)生很多time_waited線(xiàn)程。根據(jù)我們的測(cè)試結(jié)果,這個(gè)值好和maxActive相同或者是設(shè)成-1。這樣才能在高并發(fā)下,應(yīng)用到數(shù)據(jù)庫(kù)的連接也是穩(wěn)定的使用固有的connection。否則dbcp會(huì)頻繁創(chuàng)建新的連接,丟棄老的連接。而創(chuàng)建連接這個(gè)操作,比驗(yàn)證還要昂貴。

由于將maxIdle設(shè)置了一個(gè)比較高的值,應(yīng)用就會(huì)在系統(tǒng)高峰時(shí)期創(chuàng)建的連接就會(huì)維持在那里。在空閑的時(shí)候這些連接就顯得有些浪費(fèi)。很多的時(shí)候數(shù)據(jù)庫(kù)機(jī)器可能會(huì)支持多個(gè)應(yīng)用,或者一個(gè)集群可能會(huì)有很多臺(tái)應(yīng)用機(jī)器。為了能這些空閑連接能夠回收,就必須設(shè)置著一個(gè)配置項(xiàng)。這個(gè)值和minEvictableIdleTimeMillis以及numTestsPerEvictionRun會(huì)影響evictor thread的行為。默認(rèn)timeBetweenEvictionRunsMillis的值是-1,就是不會(huì)運(yùn)行。但是如果它設(shè)了一個(gè)不為-1的值,那么minEvictableIdleTimeMillis就不能設(shè)置的太短,默認(rèn)的30分鐘是個(gè)不錯(cuò)的選擇。

6.配置樣例

<bean id=“dataSource” class=“org.apache.commons.dbcp.BasicDataSource” destroy- method=“close”>

<property name=“driverClassName” value=“${db_driverClassName}” />

<property name=“url” value=“${db_rul}” />

<property name=“username” value=”${db_user}” />

<property name=“password” value=”${db_passwd}” />

<property name=“maxActive” value=”${db_maxActive }” />

<property name=“initialSize” value=”${db_initialSize}” />

<property name=“maxWait” value=”${db_maxWait}” />

<property name=“maxIdle” value=”${db_maxIdle }” />

<property name=“minIdle” value=”${db_minIdle}” />

<property name="timeBetweenEvictionRunsMillis" value="30000" />

<property name="testOnBorrow" value="false" />

<property name="testWhileIdle" value="true" />

<property name="validationQuery" value="select 1 from dual" />

<property name=“removeAbandoned” value=”true” />

<property name=“removeAbandonedTimeout” value=”180” />

</bean>

7.Mysql數(shù)據(jù)庫(kù)的配置:

<?xml version="1.0" encoding="UTF-8"?>

<beans

xmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:p="http://www.springframework.org/schema/p"

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"  scope="singleton" >

<property name="driverClassName">

<value>com.mysql.jdbc.Driver</value>

</property>

<property name="url">

<value>jdbc:mysql://localhost:3306/booksystem</value>

</property>

<property name="username">

<value>root</value>

</property>

<property name="password">

<value>mysqladmin</value>

</property>

<property name="maxActive">

<value>10</value>

</property>

<property name="initialSize">

<value>2</value>

</property>

</bean>

</beans>

關(guān)于數(shù)據(jù)庫(kù)連接池dbcp的原理及配置是怎樣的就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。

網(wǎng)站名稱(chēng):數(shù)據(jù)庫(kù)連接池dbcp的原理及配置是怎樣的-創(chuàng)新互聯(lián)
本文URL:http://www.yijiale78.com/article44/ceiohe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)公司定制網(wǎng)站標(biāo)簽優(yōu)化微信小程序App開(kāi)發(fā)品牌網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)