日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

c3p0 服务启动获取连接超时_JDBC数据库连接池

發(fā)布時(shí)間:2025/3/15 数据库 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c3p0 服务启动获取连接超时_JDBC数据库连接池 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

連接池的本質(zhì)是構(gòu)建一個(gè)容器,容器是用來(lái)存創(chuàng)建好的線程,http連接、數(shù)據(jù)庫(kù)連接、netty連接等

各個(gè)連接池的使用大致分為三個(gè)部分

1、首先是初始化連接池,根據(jù)設(shè)置相應(yīng)的參數(shù)、連接池的大小、核心連接數(shù)等參數(shù),初始化創(chuàng)建數(shù)據(jù)庫(kù)、http連接、netty連接以及jdk線程等。

2、第二步是連接池的使用,直接從連接池中、線程中取出資源即可使用,使用完后交還給連接池、線程池,通過(guò)池容器對(duì)線程進(jìn)行管理。

3、對(duì)于連接池維護(hù),連接池、線程池來(lái)維護(hù)連接、線程狀態(tài),不可用連接、線程進(jìn)行銷(xiāo)毀,正在使用連接、線程進(jìn)行狀態(tài)標(biāo)注,連接、線程不夠后并且少于設(shè)置最大連接、線程數(shù),要進(jìn)行新連接、線程創(chuàng)建。

什么情況下使用連接池?

對(duì)于一個(gè)簡(jiǎn)單的數(shù)據(jù)庫(kù)應(yīng)用,由于對(duì)于數(shù)據(jù)庫(kù)的訪問(wèn)不是很頻繁。這時(shí)可以簡(jiǎn)單地在需要訪問(wèn)數(shù)據(jù)庫(kù)時(shí),就新創(chuàng)建一個(gè)連接,用完后就關(guān)閉它,這樣做也不會(huì)帶來(lái)什么明顯的性能上的開(kāi)銷(xiāo)。但是對(duì)于一個(gè)復(fù)雜的數(shù)據(jù)庫(kù)應(yīng)用,情況就完全不同了。頻繁的建立、關(guān)閉連接,會(huì)極大的減低系統(tǒng)的性能,因?yàn)閷?duì)于連接的使用成了系統(tǒng)性能的瓶頸。

使用連接池的好處

連接復(fù)用。通過(guò)建立一個(gè)數(shù)據(jù)庫(kù)連接池以及一套連接使用管理策略,使得一個(gè)數(shù)據(jù)庫(kù)連接可以得到高效、安全的復(fù)用,避免了數(shù)據(jù)庫(kù)連接頻繁建立、關(guān)閉的開(kāi)銷(xiāo)。

對(duì)于共享資源,有一個(gè)很著名的設(shè)計(jì)模式:資源池。該模式正是為了解決資源頻繁分配、釋放所造成的問(wèn)題的。把該模式應(yīng)用到數(shù)據(jù)庫(kù)連接管理領(lǐng)域,就是建立一個(gè)數(shù)據(jù)庫(kù)連接池,提供一套高效的連接分配、使用策略,最終目標(biāo)是實(shí)現(xiàn)連接的高效、安全的復(fù)用。

連接池的實(shí)現(xiàn)

數(shù)據(jù)庫(kù)連接池的基本原理是在內(nèi)部對(duì)象池中維護(hù)一定數(shù)量的數(shù)據(jù)庫(kù)連接,并對(duì)外暴露數(shù)據(jù)庫(kù)連接獲取和返回方法。

外部使用者可通過(guò) getConnection 方法獲取連接,使用完畢后再通過(guò) close 方法將連接返回,注意此時(shí)連接并沒(méi)有關(guān)閉,而是由連接池管理器回收,并為下一次使用做好準(zhǔn)備。

Java 中有一個(gè) DataSource 接口, 數(shù)據(jù)庫(kù)連接池就是 DataSource 的一個(gè)實(shí)現(xiàn)

常用數(shù)據(jù)庫(kù)連接池

Apache DBCP官網(wǎng):http://commons.apache.org/proper/commons-dbcp/

C3P0官網(wǎng):https://www.mchange.com/projects/c3p0/index.html

DruidGitHub:https://github.com/alibaba/druid

一、JDBC數(shù)據(jù)庫(kù)連接池的必要性

在使用開(kāi)發(fā)基于數(shù)據(jù)庫(kù)的web程序時(shí),傳統(tǒng)的模式基本是按以下步驟:

  ①在主程序(如servlet、beans)中建立數(shù)據(jù)庫(kù)連接。

  ②進(jìn)行sql操作

  ③斷開(kāi)數(shù)據(jù)庫(kù)連接。

  這種模式開(kāi)發(fā),存在的問(wèn)題:

  •   ①普通的JDBC數(shù)據(jù)庫(kù)連接使用 DriverManager 來(lái)獲取,每次向數(shù)據(jù)庫(kù)建立連接的時(shí)候都要將 Connection 加載到內(nèi)存中,再驗(yàn)證用戶(hù)名和密碼(得花費(fèi)0.05s~1s的時(shí)間)。需要數(shù)據(jù)庫(kù)連接的時(shí)候,就向數(shù)據(jù)庫(kù)要求一個(gè),執(zhí)行完成后再斷開(kāi)連接。這樣的方式將會(huì)消耗大量的資源和時(shí)間。數(shù)據(jù)庫(kù)的連接資源并沒(méi)有得到很好的重復(fù)利用.若同時(shí)有幾百人甚至幾千人在線,頻繁的進(jìn)行數(shù)據(jù)庫(kù)連接操作將占用很多的系統(tǒng)資源,嚴(yán)重的甚至?xí)斐煞?wù)器的崩潰。   
  • ②對(duì)于每一次數(shù)據(jù)庫(kù)連接,使用完后都得斷開(kāi)。否則,如果程序出現(xiàn)異常而未能關(guān)閉,將會(huì)導(dǎo)致數(shù)據(jù)庫(kù)系統(tǒng)中的內(nèi)存泄漏,最終將導(dǎo)致重啟數(shù)據(jù)庫(kù)。   
  • ③這種開(kāi)發(fā)不能控制被創(chuàng)建的連接對(duì)象數(shù),系統(tǒng)資源會(huì)被毫無(wú)顧及的分配出去,如連接過(guò)多,也可能導(dǎo)致內(nèi)存泄漏,服務(wù)器崩潰。
  • 二、數(shù)據(jù)庫(kù)連接池(connection pool)

      數(shù)據(jù)庫(kù)連接池簡(jiǎn)單介紹

      為解決傳統(tǒng)開(kāi)發(fā)中的數(shù)據(jù)庫(kù)連接問(wèn)題,可以采用數(shù)據(jù)庫(kù)連接池技術(shù)。

      數(shù)據(jù)庫(kù)連接池的基本思想就是為數(shù)據(jù)庫(kù)連接建立一個(gè)“緩沖池”。預(yù)先在緩沖池中放入一定數(shù)量的連接,當(dāng)需要建立數(shù)據(jù)庫(kù)連接時(shí),只需從“緩沖池”中取出一個(gè),使用完畢之后再放回去。

      數(shù)據(jù)庫(kù)連接池負(fù)責(zé)分配、管理和釋放數(shù)據(jù)庫(kù)連接,它允許應(yīng)用程序重復(fù)使用一個(gè)現(xiàn)有的數(shù)據(jù)庫(kù)連接,而不是重新建立一個(gè)。

      數(shù)據(jù)庫(kù)連接池在初始化時(shí)將創(chuàng)建一定數(shù)量的數(shù)據(jù)庫(kù)連接放到連接池中,這些數(shù)據(jù)庫(kù)連接的數(shù)量是由最小數(shù)據(jù)庫(kù)連接數(shù)來(lái)設(shè)定的。無(wú)論這些數(shù)據(jù)庫(kù)連接是否被使用,連接池都將一直保證至少擁有這么多的連接數(shù)量。連接池的最大數(shù)據(jù)庫(kù)連接數(shù)量限定了這個(gè)連接池能占有的最大連接數(shù),當(dāng)應(yīng)用程序向連接池請(qǐng)求的連接數(shù)超過(guò)最大連接數(shù)量時(shí),這些請(qǐng)求將被加入到等待隊(duì)列中。

      數(shù)據(jù)庫(kù)連接池工作原理:

      數(shù)據(jù)庫(kù)連接池工作原理

      數(shù)據(jù)庫(kù)連接池技術(shù)的優(yōu)點(diǎn)

      資源重用:

      ①由于數(shù)據(jù)庫(kù)連接得以重用,避免了頻繁創(chuàng)建,釋放連接引起的大量性能開(kāi)銷(xiāo)。在減少系統(tǒng)消耗的基礎(chǔ)上,另一方面也增加了系統(tǒng)運(yùn)行環(huán)境的平穩(wěn)性。

      更快的系統(tǒng)反應(yīng)速度:   數(shù)據(jù)庫(kù)連接池在初始化過(guò)程中,往往已經(jīng)創(chuàng)建了若干數(shù)據(jù)庫(kù)連接置于連接池中備用。此時(shí)連接的初始化工作均已完成。對(duì)于業(yè)務(wù)請(qǐng)求處理而言,直接利用現(xiàn)有可用連接,避免了數(shù)據(jù)庫(kù)連接初始化和釋放過(guò)程的時(shí)間開(kāi)銷(xiāo),從而減少了系統(tǒng)的響應(yīng)時(shí)間

      新的資源分配手段:   對(duì)于多應(yīng)用共享同一數(shù)據(jù)庫(kù)的系統(tǒng)而言,可在應(yīng)用層通過(guò)數(shù)據(jù)庫(kù)連接池的配置,實(shí)現(xiàn)某一應(yīng)用最大可用數(shù)據(jù)庫(kù)連接數(shù)的限制,避免某一應(yīng)用獨(dú)占所有的數(shù)據(jù)庫(kù)資源

      統(tǒng)一的連接管理,避免數(shù)據(jù)庫(kù)連接泄露:   在較為完善的數(shù)據(jù)庫(kù)連接池實(shí)現(xiàn)中,可根據(jù)預(yù)先的占用超時(shí)設(shè)定,強(qiáng)制回收被占用連接,從而避免了常規(guī)數(shù)據(jù)庫(kù)連接操作中可能出現(xiàn)的資源泄露

    三、兩種開(kāi)源的數(shù)據(jù)庫(kù)連接池

      JDBC 的數(shù)據(jù)庫(kù)連接池使用 javax.sql.DataSource 來(lái)表示,DataSource 只是一個(gè)接口,該接口通常由服務(wù)器(Weblogic, WebSphere, Tomcat)提供實(shí)現(xiàn),也有一些開(kāi)源組織提供實(shí)現(xiàn):   ①DBCP 數(shù)據(jù)庫(kù)連接池   ②C3P0 數(shù)據(jù)庫(kù)連接池

      DataSource 通常被稱(chēng)為數(shù)據(jù)源,它包含連接池和連接池管理兩個(gè)部分,習(xí)慣上也經(jīng)常把 DataSource稱(chēng)為連接池

      數(shù)據(jù)源和數(shù)據(jù)庫(kù)連接不同,數(shù)據(jù)源無(wú)需創(chuàng)建多個(gè),它是產(chǎn)生數(shù)據(jù)庫(kù)連接的工廠,因此整個(gè)應(yīng)用只需要一個(gè)數(shù)據(jù)源即可。

      當(dāng)數(shù)據(jù)庫(kù)訪問(wèn)結(jié)束后,程序還是像以前一樣關(guān)閉數(shù)據(jù)庫(kù)連接:conn.close(); 但上面的代碼并沒(méi)有關(guān)閉數(shù)據(jù)庫(kù)的物理連接,它僅僅把數(shù)據(jù)庫(kù)連接釋放,歸還給了數(shù)據(jù)庫(kù)連接池。

    總結(jié)

    以上是生活随笔為你收集整理的c3p0 服务启动获取连接超时_JDBC数据库连接池的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。