銆銆鍦↗ava璇█涓紝JDBC錛圝ava DataBase Connection錛夋槸搴旂敤紼嬪簭涓庢暟鎹簱娌熼氱殑妗ユ,
銆銆鍗矹ava璇█閫氳繃JDBC鎶鏈闂暟鎹簱銆侸DBC鏄竴縐嶁滃紑鏀鋸濈殑鏂規(guī)錛屽畠涓烘暟鎹簱搴旂敤寮鍙戜漢鍛橈箲鏁版嵁搴撳墠鍙板伐鍏峰紑鍙戜漢鍛樻彁渚涗簡涓縐嶆爣鍑嗙殑搴旂敤紼嬪簭璁捐鎺ュ彛錛屼嬌寮鍙戜漢鍛樺彲浠ョ敤綰疛ava璇█緙栧啓瀹屾暣鐨勬暟鎹簱搴旂敤紼嬪簭銆侸DBC鎻愪緵涓ょAPI錛屽垎鍒槸闈㈠悜寮鍙戜漢鍛樼殑API鍜岄潰鍚戝簳灞傜殑JDBC椹卞姩紼嬪簭API錛屽簳灞備富瑕侀氳繃鐩存帴鐨凧DBC椹卞姩鍜孞DBC-ODBC妗ラ┍鍔ㄥ疄鐜頒笌鏁版嵁搴撶殑榪炴帴銆?/p>
銆銆涓鑸潵璇達(dá)紝Java搴旂敤紼嬪簭璁塊棶鏁版嵁搴撶殑榪囩▼錛堝鍥?鎵紺猴級鏄細(xì)
銆銆鈶犺杞芥暟鎹簱椹卞姩紼嬪簭錛?/p>
銆銆鈶¢氳繃JDBC寤虹珛鏁版嵁搴撹繛鎺ワ紱
銆銆鈶㈣闂暟鎹簱錛屾墽琛孲QL璇彞錛?/p>
銆銆鈶f柇寮鏁版嵁搴撹繛鎺ャ?/p>
鍥? Java鏁版嵁搴撹闂満鍒躲銆JDBC浣滀負(fù)涓縐嶆暟鎹簱璁塊棶鎶鏈紝鍏鋒湁綆鍗曟槗鐢ㄧ殑浼樼偣銆備絾浣跨敤榪欑妯″紡榪涜W(xué)eb搴旂敤銆銆紼嬪簭寮鍙戯紝瀛樺湪寰堝闂錛氶鍏堬紝姣忎竴嬈eb璇鋒眰閮借寤虹珛涓嬈℃暟鎹簱榪炴帴銆傚緩绔嬭繛鎺ユ槸涓涓垂鏃剁殑媧誨姩錛屾瘡嬈¢兘寰楄姳璐?.05s锝?s鐨勬椂闂達(dá)紝鑰屼笖緋葷粺榪樿鍒嗛厤鍐呭瓨璧勬簮銆傝繖涓椂闂村浜庝竴嬈℃垨鍑犳鏁版嵁搴撴搷浣滐紝鎴栬鎰熻涓嶅嚭緋葷粺鏈夊澶х殑寮閿銆傚彲鏄浜庣幇鍦ㄧ殑Web搴旂敤錛屽挨鍏舵槸澶у瀷鐢?shù)瀛愬晢鍔【|戠珯錛屽悓鏃舵湁鍑犵櫨浜虹敋鑷沖嚑鍗冧漢鍦ㄧ嚎鏄緢姝e父鐨勪簨銆傚湪榪欑鎯呭喌涓嬶紝棰戠箒鐨勮繘琛屾暟鎹簱榪炴帴鎿嶄綔鍔垮繀鍗犵敤寰堝鐨勭郴緇熻祫婧愶紝緗戠珯鐨勫搷搴旈熷害蹇呭畾涓嬮檷錛屼弗閲嶇殑鐢氳嚦浼?xì)閫犳垚鏈嶅姟鍣ㄧ殑宕╂簝銆備笉鏄嵄璦鑰稿惉錛岃繖灝辨槸鍒剁害鏌愪簺鐢?shù)瀛愬晢鍔【|戠珯鍙戝睍鐨勬妧鏈摱棰堥棶棰樸傚叾嬈★紝瀵逛簬姣忎竴嬈℃暟鎹簱榪炴帴錛屼嬌鐢ㄥ畬鍚庨兘寰楁柇寮銆傚惁鍒欙紝濡傛灉紼嬪簭鍑虹幇寮傚父鑰屾湭鑳藉叧闂紝灝嗕細(xì)瀵艱嚧鏁版嵁搴撶郴緇熶腑鐨勫唴瀛樻硠婕忥紝鏈緇堝皢涓嶅緱涓嶉噸鍚暟鎹簱銆傝繕鏈夛紝榪欑寮鍙戜笉鑳芥帶鍒惰鍒涘緩鐨勮繛鎺ュ璞℃暟錛岀郴緇熻祫婧愪細(xì)琚鏃犻【鍙婄殑鍒嗛厤鍑哄幓錛屽榪炴帴榪囧錛屼篃鍙兘瀵艱嚧鍐呭瓨娉勬紡錛屾湇鍔″櫒宕╂簝銆?聽 銆銆鏁版嵁搴撹繛鎺ユ睜錛坈onnection pool錛夌殑宸ヤ綔鍘熺悊銆銆1銆佸熀鏈蹇靛強鍘熺悊銆銆鐢變笂闈㈢殑鍒嗘瀽鍙互鐪嬪嚭錛岄棶棰樼殑鏍規(guī)簮灝卞湪浜庡鏁版嵁搴撹繛鎺ヨ祫婧愮殑浣庢晥綆$悊銆傛垜浠煡閬擄紝銆銆瀵逛簬鍏變韓璧勬簮錛屾湁涓涓緢钁楀悕鐨勮璁℃ā寮忥細(xì)璧勬簮姹狅紙Resource Pool錛夈傝妯″紡姝f槸涓轟簡瑙e喅璧勬簮鐨勯綣佸垎閰嶏箲閲婃斁鎵閫犳垚鐨勯棶棰樸備負(fù)瑙e喅涓婅堪闂錛屽彲浠ラ噰鐢ㄦ暟鎹簱榪炴帴姹犳妧鏈傛暟鎹簱榪炴帴姹犵殑鍩烘湰鎬濇兂灝辨槸涓烘暟鎹簱榪炴帴寤虹珛涓涓滅紦鍐叉睜鈥濄傞鍏堝湪緙撳啿姹犱腑鏀懼叆涓瀹氭暟閲忕殑榪炴帴錛屽綋闇瑕佸緩绔嬫暟鎹簱榪炴帴鏃訛紝鍙渶浠庘滅紦鍐叉睜鈥濅腑鍙栧嚭涓涓紝浣跨敤瀹屾瘯涔嬪悗鍐嶆斁鍥炲幓銆傛垜浠彲浠ラ氳繃璁懼畾榪炴帴姹犳渶澶ц繛鎺ユ暟鏉ラ槻姝㈢郴緇熸棤灝界殑涓庢暟鎹簱榪炴帴銆傛洿涓洪噸瑕佺殑鏄垜浠彲浠ラ氳繃榪炴帴姹犵殑綆$悊鏈哄埗鐩戣鏁版嵁搴撶殑榪炴帴鐨勬暟閲忥箲浣跨敤鎯呭喌錛屼負(fù)緋葷粺寮鍙戯箲嫻嬭瘯鍙婃ц兘璋冩暣鎻愪緵渚濇嵁銆傝繛鎺ユ睜鐨勫熀鏈伐浣滃師鐞嗚涓嬪浘2銆?
鍥? 榪炴帴姹犵殑鍩烘湰宸ヤ綔鍘熺悊銆銆2銆佹湇鍔″櫒鑷甫鐨勮繛鎺ユ睜銆銆JDBC鐨凙PI涓病鏈夋彁渚涜繛鎺ユ睜鐨勬柟娉曘備竴浜涘ぇ鍨嬬殑WEB搴旂敤鏈嶅姟鍣ㄥBEA鐨刉ebLogic鍜孖BM鐨刉ebSphere絳夋彁渚涗簡榪炴帴姹犵殑鏈哄埗錛屼絾鏄繀欏繪湁鍏剁涓夋柟鐨勪笓鐢ㄧ被鏂規(guī)硶鏀寔榪炴帴姹犵殑鐢ㄦ硶銆傘銆榪炴帴姹犲叧閿棶棰樺垎鏋愩銆1銆佸茍鍙戦棶棰樸銆涓轟簡浣胯繛鎺ョ鐞嗘湇鍔″叿鏈夋渶澶х殑閫氱敤鎬э紝蹇呴』鑰冭檻澶氱嚎紼嬬幆澧冿紝鍗沖茍鍙戦棶棰樸傝繖涓棶棰樼浉瀵規(guī)瘮杈冨ソ瑙e喅錛屽洜涓篔ava璇█鑷韓鎻愪緵浜嗗騫跺彂綆$悊鐨勬敮鎸侊紝浣跨敤synchronized鍏抽敭瀛楀嵆鍙‘淇濈嚎紼嬫槸鍚屾鐨勩備嬌鐢ㄦ柟娉曚負(fù)鐩存帴鍦ㄧ被鏂規(guī)硶鍓嶉潰鍔犱笂synchronized鍏抽敭瀛楋紝濡傦細(xì) public synchronized Connection getConnection錛堬級 銆銆2銆佸鏁版嵁搴撴湇鍔″櫒鍜屽鐢ㄦ埛銆銆瀵逛簬澶у瀷鐨勪紒涓氱駭搴旂敤錛屽父甯擱渶瑕佸悓鏃惰繛鎺ヤ笉鍚岀殑鏁版嵁搴擄紙濡傝繛鎺racle鍜孲ybase錛夈傚浣曡繛鎺ヤ笉鍚岀殑鏁版嵁搴撳憿錛熸垜浠噰鐢ㄧ殑絳栫暐鏄細(xì)璁捐涓涓鍚堝崟渚嬫ā寮忕殑榪炴帴姹犵鐞嗙被錛屽湪榪炴帴姹犵鐞嗙被鐨勫敮涓瀹炰緥琚垱寤烘椂璇誨彇涓涓祫婧愭枃浠訛紝鍏朵腑璧勬簮鏂囦歡涓瓨鏀劇潃澶氫釜鏁版嵁搴撶殑url鍦板潃錛?lt;poolName.url>錛夛箲鐢ㄦ埛鍚嶏紙<poolName.user>錛夛箲瀵嗙爜錛?lt;poolName.password>錛夌瓑淇℃伅銆傚tx.url=172.21.15.123錛?000/tx_it錛宼x.user=yang錛宼x.password=yang321銆傛牴鎹祫婧愭枃浠舵彁渚涚殑淇℃伅錛屽垱寤哄涓繛鎺ユ睜綾葷殑瀹炰緥錛屾瘡涓涓疄渚嬮兘鏄竴涓壒瀹氭暟鎹簱鐨勮繛鎺ユ睜銆傝繛鎺ユ睜綆$悊綾誨疄渚嬩負(fù)姣忎釜榪炴帴姹犲疄渚嬪彇涓涓悕瀛楋紝閫氳繃涓嶅悓鐨勫悕瀛楁潵綆$悊涓嶅悓鐨勮繛鎺ユ睜銆傘銆瀵逛簬鍚屼竴涓暟鎹簱鏈夊涓敤鎴蜂嬌鐢ㄤ笉鍚岀殑鍚嶇О鍜屽瘑鐮佽闂殑鎯呭喌錛屼篃鍙互閫氳繃璧勬簮鏂囦歡澶勭悊錛屽嵆鍦ㄨ祫婧愭枃浠朵腑璁劇疆澶氫釜鍏鋒湁鐩稿悓url鍦板潃錛屼絾鍏鋒湁涓嶅悓鐢ㄦ埛鍚嶅拰瀵嗙爜鐨勬暟鎹簱榪炴帴淇℃伅銆傘銆3銆佷簨鍔″鐞嗐銆鎴戜滑鐭ラ亾錛屼簨鍔″叿鏈夊師瀛愭э紝姝ゆ椂瑕佹眰瀵規(guī)暟鎹簱鐨勬搷浣滅鍚堚淎LL-ALL-NOTHING鈥濆師鍒?鍗沖浜庝竴緇凷QL璇彞瑕佷箞鍏ㄥ仛錛岃涔堝叏涓嶅仛銆傘銆鍦↗ava璇█涓紝Connection綾繪湰韜彁渚涗簡瀵逛簨鍔$殑鏀寔錛屽彲浠ラ氳繃璁劇疆Connection鐨凙utoCommit灞炴т負(fù)false,鐒跺悗鏄懼紡鐨勮皟鐢╟ommit鎴杛ollback鏂規(guī)硶鏉ュ疄鐜般備絾瑕侀珮鏁堢殑榪涜Connection澶嶇敤錛屽氨蹇呴』鎻愪緵鐩稿簲鐨勪簨鍔℃敮鎸佹満鍒躲傚彲閲囩敤姣忎竴涓簨鍔$嫭鍗犱竴涓繛鎺ユ潵瀹炵幇錛岃繖縐嶆柟娉曞彲浠ュぇ澶ч檷浣庝簨鍔$鐞嗙殑澶嶆潅鎬с傘銆4銆佽繛鎺ユ睜鐨勫垎閰嶄笌閲婃斁銆銆榪炴帴姹犵殑鍒嗛厤涓庨噴鏀撅紝瀵圭郴緇熺殑鎬ц兘鏈夊緢澶х殑褰卞搷銆傚悎鐞嗙殑鍒嗛厤涓庨噴鏀撅紝鍙互鎻愰珮榪炴帴鐨勫鐢ㄥ害錛屼粠鑰岄檷浣庡緩绔嬫柊榪炴帴鐨勫紑閿錛屽悓鏃惰繕鍙互鍔犲揩鐢ㄦ埛鐨勮闂熷害銆傘銆瀵逛簬榪炴帴鐨勭鐞嗗彲浣跨敤絀洪棽姹犮傚嵆鎶婂凡緇忓垱寤轟絾灝氭湭鍒嗛厤鍑哄幓鐨勮繛鎺ユ寜鍒涘緩鏃墮棿瀛樻斁鍒頒竴涓┖闂叉睜涓傛瘡褰撶敤鎴瘋姹備竴涓繛鎺ユ椂錛岀郴緇熼鍏堟鏌ョ┖闂叉睜鍐呮湁娌℃湁絀洪棽榪炴帴銆傚鏋滄湁灝辨妸寤虹珛鏃墮棿鏈闀匡紙閫氳繃瀹瑰櫒鐨勯『搴忓瓨鏀懼疄鐜幫級鐨勯偅涓繛鎺ュ垎閰嶇粰浠栵紙瀹為檯鏄厛鍋氳繛鎺ユ槸鍚︽湁鏁堢殑鍒ゆ柇錛屽鏋滃彲鐢ㄥ氨鍒嗛厤緇欑敤鎴鳳紝濡備笉鍙敤灝辨妸榪欎釜榪炴帴浠庣┖闂叉睜鍒犳帀錛岄噸鏂版嫻嬬┖闂叉睜鏄惁榪樻湁榪炴帴錛夛紱濡傛灉娌℃湁鍒欐鏌ュ綋鍓嶆墍寮榪炴帴姹犳槸鍚﹁揪鍒拌繛鎺ユ睜鎵鍏佽鐨勬渶澶ц繛鎺ユ暟錛坢axConn錛?濡傛灉娌℃湁杈懼埌錛屽氨鏂板緩涓涓繛鎺ワ紝濡傛灉宸茬粡杈懼埌錛屽氨絳夊緟涓瀹氱殑鏃墮棿錛坱imeout錛夈傚鏋滃湪絳夊緟鐨勬椂闂村唴鏈夎繛鎺ヨ閲婃斁鍑烘潵灝卞彲浠ユ妸榪欎釜榪炴帴鍒嗛厤緇欑瓑寰呯殑鐢ㄦ埛錛屽鏋滅瓑寰呮椂闂磋秴榪囬瀹氭椂闂磘imeout,鍒欒繑鍥炵┖鍊鹼紙null錛夈傜郴緇熷宸茬粡鍒嗛厤鍑哄幓姝e湪浣跨敤鐨勮繛鎺ュ彧鍋氳鏁幫紝褰撲嬌鐢ㄥ畬鍚庡啀榪旇繕緇欑┖闂叉睜銆傚浜庣┖闂茶繛鎺ョ殑鐘舵侊紝鍙紑杈熶笓闂ㄧ殑綰跨▼瀹氭椂媯嫻嬶紝榪欐牱浼?xì)鑺辫垂涓瀹氱殑緋葷粺寮閿錛屼絾鍙互淇濊瘉杈冨揩鐨勫搷搴旈熷害銆備篃鍙噰鍙栦笉寮杈熶笓闂ㄧ嚎紼嬶紝鍙槸鍦ㄥ垎閰嶅墠媯嫻嬬殑鏂規(guī)硶銆傘銆5銆佽繛鎺ユ睜鐨勯厤緗笌緇存姢銆銆榪炴帴姹犱腑鍒板簳搴旇鏀劇疆澶氬皯榪炴帴錛屾墠鑳戒嬌緋葷粺鐨勬ц兘鏈浣籌紵緋葷粺鍙噰鍙栬緗渶灝忚繛鎺ユ暟錛坢inConn錛夊拰鏈澶ц繛鎺ユ暟錛坢axConn錛夋潵鎺у埗榪炴帴姹犱腑鐨勮繛鎺ャ傛渶灝忚繛鎺ユ暟鏄郴緇熷惎鍔ㄦ椂榪炴帴姹犳墍鍒涘緩鐨勮繛鎺ユ暟銆傚鏋滃垱寤鴻繃澶氾紝鍒欑郴緇熷惎鍔ㄥ氨鎱紝浣嗗垱寤哄悗緋葷粺鐨勫搷搴旈熷害浼?xì)寰堝揩锛涘鏋滃垱寰彉q囧皯錛屽垯緋葷粺鍚姩鐨勫緢蹇紝鍝嶅簲璧鋒潵鍗存參銆傝繖鏍鳳紝鍙互鍦ㄥ紑鍙戞椂錛岃緗緝?yōu)畯鐨勬渶灝忚繛鎺ユ暟錛屽紑鍙戣搗鏉ヤ細(xì)蹇紝鑰屽湪緋葷粺瀹為檯浣跨敤鏃惰緗緝澶х殑錛屽洜涓鴻繖鏍峰璁塊棶瀹㈡埛鏉ヨ閫熷害浼?xì)蹇簺銆傛渶澶ц繛鎺ユ暟鏄繛鎺ユ睜涓厑璁歌繛鎺ョ殑鏈澶ф暟鐩紝鍏蜂綋璁劇疆澶氬皯錛岃鐪嬬郴緇熺殑璁塊棶閲忥紝鍙氳繃鍙嶅嫻嬭瘯錛屾壘鍒版渶浣崇偣銆傘銆濡備綍紜繚榪炴帴姹犱腑鐨勬渶灝忚繛鎺ユ暟鍛紵鏈夊姩鎬佸拰闈欐佷袱縐嶇瓥鐣ャ傚姩鎬佸嵆姣忛殧涓瀹氭椂闂村氨瀵硅繛鎺ユ睜榪涜媯嫻嬶紝濡傛灉鍙戠幇榪炴帴鏁伴噺灝忎簬鏈灝忚繛鎺ユ暟錛屽垯琛ュ厖鐩稿簲鏁伴噺鐨勬柊榪炴帴,浠ヤ繚璇佽繛鎺ユ睜鐨勬甯歌繍杞傞潤鎬佹槸鍙戠幇絀洪棽榪炴帴涓嶅鏃跺啀鍘繪鏌ャ?聽 銆銆榪炴帴姹犵殑瀹炵幇銆銆1銆佽繛鎺ユ睜妯″瀷銆銆鏈枃璁ㄨ鐨勮繛鎺ユ睜鍖呮嫭涓涓繛鎺ユ睜綾伙紙DBConnectionPool錛夊拰涓涓繛鎺ユ睜綆$悊綾伙紙DBConnetionPoolManager錛夈傝繛鎺ユ睜綾繪槸瀵規(guī)煇涓鏁版嵁搴撴墍鏈夎繛鎺ョ殑鈥滅紦鍐叉睜鈥濓紝涓昏瀹炵幇浠ヤ笅鍔熻兘錛氣憼浠庤繛鎺ユ睜鑾峰彇鎴栧垱寤哄彲鐢ㄨ繛鎺ワ紱鈶′嬌鐢ㄥ畬姣曚箣鍚庯紝鎶婅繛鎺ヨ繑榪樼粰榪炴帴姹狅紱鈶㈠湪緋葷粺鍏抽棴鍓嶏紝鏂紑鎵鏈夎繛鎺ュ茍閲婃斁榪炴帴鍗犵敤鐨勭郴緇熻祫婧愶紱鈶h繕鑳藉澶勭悊鏃犳晥榪炴帴錛堝師鏉ョ櫥璁頒負(fù)鍙敤鐨勮繛鎺ワ紝鐢變簬鏌愮鍘熷洜涓嶅啀鍙敤錛屽瓚呮椂錛岄氳闂錛夛紝騫惰兘澶熼檺鍒惰繛鎺ユ睜涓殑榪炴帴鎬繪暟涓嶄綆浜庢煇涓瀹氬煎拰涓嶈秴榪囨煇涓瀹氬箋傘銆榪炴帴姹犵鐞嗙被鏄繛鎺ユ睜綾葷殑澶栬綾伙紙wrapper錛?絎﹀悎鍗曚緥妯″紡錛屽嵆緋葷粺涓彧鑳芥湁涓涓繛鎺ユ睜綆$悊綾葷殑瀹炰緥銆傚叾涓昏鐢ㄤ簬瀵瑰涓繛鎺ユ睜瀵硅薄鐨勭鐞嗭紝鍏鋒湁浠ヤ笅鍔熻兘錛氣憼瑁呰澆騫舵敞鍐岀壒瀹氭暟鎹簱鐨凧DBC椹卞姩紼嬪簭錛涒憽鏍規(guī)嵁灞炴ф枃浠剁粰瀹氱殑淇℃伅錛屽垱寤鴻繛鎺ユ睜瀵硅薄錛涒憿涓烘柟渚跨鐞嗗涓繛鎺ユ睜瀵硅薄錛屼負(fù)姣忎竴涓繛鎺ユ睜瀵硅薄鍙栦竴涓悕瀛楋紝瀹炵幇榪炴帴姹犲悕瀛椾笌鍏跺疄渚嬩箣闂寸殑鏄犲皠錛涒懀璺熻釜瀹㈡埛浣跨敤榪炴帴鎯呭喌錛屼互渚塊渶瑕佹槸鍏抽棴榪炴帴閲婃斁璧勬簮銆傝繛鎺ユ睜綆$悊綾葷殑寮曞叆涓昏鏄負(fù)浜嗘柟渚垮澶氫釜榪炴帴姹犵殑浣跨敤鍜岀鐞嗭紝濡傜郴緇熼渶瑕佽繛鎺ヤ笉鍚岀殑鏁版嵁搴擄紝鎴栬繛鎺ョ浉鍚岀殑鏁版嵁搴撲絾鐢變簬瀹夊叏鎬ч棶棰橈紝闇瑕佷笉鍚岀殑鐢ㄦ埛浣跨敤涓嶅悓鐨勫悕縐板拰瀵嗙爜銆傘銆2銆佽繛鎺ユ睜瀹炵幇銆銆涓嬮潰緇欏嚭榪炴帴姹犵被鍜岃繛鎺ユ睜綆$悊綾葷殑涓昏灞炴у強鎵瑕佸疄鐜扮殑鍩烘湰鎺ュ彛錛?public class DBConnectionPool implements TimerListener{
private int checkedOut;//宸茶鍒嗛厤鍑哄幓鐨勮繛鎺ユ暟
private ArrayList freeConnections = new ArrayList();//瀹瑰櫒錛岀┖闂叉睜錛屾牴鎹?/鍒涘緩鏃墮棿欏哄簭瀛樻斁宸插垱寤轟絾灝氭湭鍒嗛厤鍑哄幓鐨勮繛鎺?br />private int minConn;//榪炴帴姹犻噷榪炴帴鐨勬渶灝忔暟閲?br />private int maxConn;//榪炴帴姹犻噷鍏佽瀛樺湪鐨勬渶澶ц繛鎺ユ暟
private String name;//涓鴻繖涓繛鎺ユ睜鍙栦釜鍚嶅瓧錛屾柟渚跨鐞?br />private String password;//榪炴帴鏁版嵁搴撴椂闇瑕佺殑瀵嗙爜
private String url;//鎵瑕佸垱寤鴻繛鎺ョ殑鏁版嵁搴撶殑鍦板潃
private String user;//榪炴帴鏁版嵁搴撴椂闇瑕佺殑鐢ㄦ埛鍚?br />public Timer timer;//瀹氭椂鍣?br />public DBConnectionPool(String name, String URL, String user, String
password, int maxConn)//鍏紑鐨勬瀯閫犲嚱鏁?br />public synchronized void freeConnection(Connection con) //浣跨敤瀹屾瘯涔嬪悗錛?/鎶婅繛鎺ヨ繑榪樼粰絀洪棽姹?br />public synchronized Connection getConnection(long timeout)//寰楀埌涓涓繛鎺ワ紝//timeout鏄瓑寰呮椂闂?br />public synchronized void release()//鏂紑鎵鏈夎繛鎺ワ紝閲婃斁鍗犵敤鐨勭郴緇熻祫婧?br />private Connection newConnection()//鏂板緩涓涓暟鎹簱榪炴帴
public synchronized void TimerEvent() //瀹氭椂鍣ㄤ簨浠跺鐞嗗嚱鏁?} public class DBConnectionManager {
static private DBConnectionManager instance;//榪炴帴姹犵鐞嗙被鐨勫敮涓瀹炰緥
static private int clients;//瀹㈡埛鏁伴噺
private ArrayList drivers = new ArrayList();//瀹瑰櫒錛屽瓨鏀炬暟鎹簱椹卞姩紼嬪簭 private HashMap pools = new HashMap ();//浠ame/value鐨勫艦寮忓瓨鍙栬繛鎺ユ睜//瀵硅薄鐨勫悕瀛楀強榪炴帴姹犲璞?br />static synchronized public DBConnectionManager getInstance()//濡傛灉鍞竴鐨?/瀹炰緥instance宸茬粡鍒涘緩錛岀洿鎺ヨ繑鍥炶繖涓疄渚?鍚﹀垯錛岃皟鐢ㄧ鏈夋瀯閫犲嚱鏁幫紝鍒?/寤鴻繛鎺ユ睜綆$悊綾葷殑鍞竴瀹炰緥 private DBConnectionManager()//縐佹湁鏋勯犲嚱鏁?鍦ㄥ叾涓皟鐢ㄥ垵濮嬪寲鍑芥暟init() public void freeConnection(String name, Connection con)// 閲婃斁涓涓繛鎺ワ紝//name鏄竴涓繛鎺ユ睜瀵硅薄鐨勫悕瀛?public Connection getConnection(String name)//浠庡悕瀛椾負(fù)name鐨勮繛鎺ユ睜瀵硅薄//涓緱鍒頒竴涓繛鎺?public Connection getConnection(String name, long time)//浠庡悕瀛椾負(fù)name //鐨勮繛鎺ユ睜瀵硅薄涓彇寰椾竴涓繛鎺ワ紝time鏄瓑寰呮椂闂?public synchronized void release()//閲婃斁鎵鏈夎祫婧?private void createPools(Properties props)//鏍規(guī)嵁灞炴ф枃浠舵彁渚涚殑淇℃伅錛屽垱寤?/涓涓垨澶氫釜榪炴帴姹?private void init()//鍒濆鍖栬繛鎺ユ睜綆$悊綾葷殑鍞竴瀹炰緥錛岀敱縐佹湁鏋勯犲嚱鏁拌皟鐢?private void loadDrivers(Properties props)//瑁呰澆鏁版嵁搴撻┍鍔ㄧ▼搴?}聽 銆銆3銆佽繛鎺ユ睜浣跨敤銆銆涓婇潰鎵瀹炵幇鐨勮繛鎺ユ睜鍦ㄧ▼搴忓紑鍙戞椂濡備綍搴旂敤鍒扮郴緇熶腑鍛紵涓嬮潰浠ervlet涓轟緥璇存槑榪炴帴姹犵殑浣跨敤銆傘銆Servlet鐨勭敓鍛藉懆鏈熸槸錛氬湪寮濮嬪緩绔媠ervlet鏃訛紝璋冪敤鍏跺垵濮嬪寲錛坕nit錛夋柟娉曘備箣鍚庢瘡涓敤鎴瘋姹傞兘瀵艱嚧涓涓皟鐢ㄥ墠闈㈠緩绔嬬殑瀹炰緥鐨剆ervice鏂規(guī)硶鐨勭嚎紼嬨傛渶鍚庯紝褰撴湇鍔″櫒鍐沖畾鍗歌澆涓涓猻ervlet鏃訛紝瀹冮鍏堣皟鐢ㄨservlet鐨?destroy鏂規(guī)硶銆傘銆鏍規(guī)嵁servlet鐨勭壒鐐癸紝鎴戜滑鍙互鍦ㄥ垵濮嬪寲鍑芥暟涓敓鎴愯繛鎺ユ睜綆$悊綾葷殑鍞竴瀹炰緥錛堝叾涓寘鎷垱寤轟竴涓垨澶氫釜榪炴帴姹狅級銆傚錛?public void init() throws ServletException
{
銆connMgr = DBConnectionManager.getInstance();
}聽 銆銆鐒跺悗灝卞彲浠ュ湪service鏂規(guī)硶涓氳繃榪炴帴姹犲悕縐頒嬌鐢ㄨ繛鎺ユ睜錛屾墽琛屾暟鎹簱鎿嶄綔銆傛渶鍚庡湪destroy鏂規(guī)硶涓噴鏀懼崰鐢ㄧ殑緋葷粺璧勬簮錛屽錛?public void destroy() {
銆connMgr.release(); super.destroy();
} 銆銆緇撴潫璇銆鍦ㄤ嬌鐢↗DBC榪涜涓庢暟鎹簱鏈夊叧鐨勫簲鐢ㄥ紑鍙戜腑錛屾暟鎹簱榪炴帴鐨勭鐞嗘槸涓涓毦鐐廣傚緢澶氭椂鍊欙紝榪炴帴鐨勬販涔辯鐞嗘墍閫犳垚鐨勭郴緇熻祫婧愬紑閿榪囧ぇ鎴愪負(fù)鍒剁害澶у瀷浼佷笟綰у簲鐢ㄦ晥鐜囩殑鐡墮銆傚浜庝紬澶氱敤鎴瘋闂殑Web搴旂敤錛岄噰鐢ㄦ暟鎹簱榪炴帴鎶鏈殑緋葷粺鍦ㄦ晥鐜囧拰紼沖畾鎬т笂姣旈噰鐢ㄤ紶緇熺殑鍏朵粬鏂瑰紡鐨勭郴緇熻濂藉緢澶氥傛湰鏂囬槓榪頒簡浣跨敤JDBC璁塊棶鏁版嵁搴撶殑鎶鏈箲璁ㄨ浜嗗熀浜庤繛鎺ユ睜鎶鏈殑鏁版嵁搴撹繛鎺ョ鐞嗙殑鍏抽敭闂騫剁粰鍑轟簡涓涓疄鐜版ā鍨嬨傛枃绔犳墍緇欏嚭鐨勬槸榪炴帴姹犵鐞嗙▼搴忕殑涓縐嶅熀鏈ā寮忥紝涓烘彁楂樼郴緇熺殑鏁翠綋鎬ц兘錛屽湪姝ゅ熀紜涓婅繕鍙互榪涜寰堝鏈夋剰涔夌殑鎵╁睍銆?/span>