c3p0 服务启动获取连接超时_JDBC数据库连接池
連接池的本質(zhì)是構(gòu)建一個容器,容器是用來存創(chuàng)建好的線程,http連接、數(shù)據(jù)庫連接、netty連接等
各個連接池的使用大致分為三個部分
1、首先是初始化連接池,根據(jù)設(shè)置相應(yīng)的參數(shù)、連接池的大小、核心連接數(shù)等參數(shù),初始化創(chuàng)建數(shù)據(jù)庫、http連接、netty連接以及jdk線程等。
2、第二步是連接池的使用,直接從連接池中、線程中取出資源即可使用,使用完后交還給連接池、線程池,通過池容器對線程進行管理。
3、對于連接池維護,連接池、線程池來維護連接、線程狀態(tài),不可用連接、線程進行銷毀,正在使用連接、線程進行狀態(tài)標注,連接、線程不夠后并且少于設(shè)置最大連接、線程數(shù),要進行新連接、線程創(chuàng)建。
什么情況下使用連接池?
對于一個簡單的數(shù)據(jù)庫應(yīng)用,由于對于數(shù)據(jù)庫的訪問不是很頻繁。這時可以簡單地在需要訪問數(shù)據(jù)庫時,就新創(chuàng)建一個連接,用完后就關(guān)閉它,這樣做也不會帶來什么明顯的性能上的開銷。但是對于一個復(fù)雜的數(shù)據(jù)庫應(yīng)用,情況就完全不同了。頻繁的建立、關(guān)閉連接,會極大的減低系統(tǒng)的性能,因為對于連接的使用成了系統(tǒng)性能的瓶頸。
使用連接池的好處
連接復(fù)用。通過建立一個數(shù)據(jù)庫連接池以及一套連接使用管理策略,使得一個數(shù)據(jù)庫連接可以得到高效、安全的復(fù)用,避免了數(shù)據(jù)庫連接頻繁建立、關(guān)閉的開銷。
對于共享資源,有一個很著名的設(shè)計模式:資源池。該模式正是為了解決資源頻繁分配、釋放所造成的問題的。把該模式應(yīng)用到數(shù)據(jù)庫連接管理領(lǐng)域,就是建立一個數(shù)據(jù)庫連接池,提供一套高效的連接分配、使用策略,最終目標是實現(xiàn)連接的高效、安全的復(fù)用。
連接池的實現(xiàn)
數(shù)據(jù)庫連接池的基本原理是在內(nèi)部對象池中維護一定數(shù)量的數(shù)據(jù)庫連接,并對外暴露數(shù)據(jù)庫連接獲取和返回方法。
外部使用者可通過 getConnection 方法獲取連接,使用完畢后再通過 close 方法將連接返回,注意此時連接并沒有關(guān)閉,而是由連接池管理器回收,并為下一次使用做好準備。
Java 中有一個 DataSource 接口, 數(shù)據(jù)庫連接池就是 DataSource 的一個實現(xiàn)
常用數(shù)據(jù)庫連接池
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ù)庫連接池的必要性
在使用開發(fā)基于數(shù)據(jù)庫的web程序時,傳統(tǒng)的模式基本是按以下步驟:
①在主程序(如servlet、beans)中建立數(shù)據(jù)庫連接。
②進行sql操作
③斷開數(shù)據(jù)庫連接。
這種模式開發(fā),存在的問題:
二、數(shù)據(jù)庫連接池(connection pool)
數(shù)據(jù)庫連接池簡單介紹
為解決傳統(tǒng)開發(fā)中的數(shù)據(jù)庫連接問題,可以采用數(shù)據(jù)庫連接池技術(shù)。
數(shù)據(jù)庫連接池的基本思想就是為數(shù)據(jù)庫連接建立一個“緩沖池”。預(yù)先在緩沖池中放入一定數(shù)量的連接,當需要建立數(shù)據(jù)庫連接時,只需從“緩沖池”中取出一個,使用完畢之后再放回去。
數(shù)據(jù)庫連接池負責(zé)分配、管理和釋放數(shù)據(jù)庫連接,它允許應(yīng)用程序重復(fù)使用一個現(xiàn)有的數(shù)據(jù)庫連接,而不是重新建立一個。
數(shù)據(jù)庫連接池在初始化時將創(chuàng)建一定數(shù)量的數(shù)據(jù)庫連接放到連接池中,這些數(shù)據(jù)庫連接的數(shù)量是由最小數(shù)據(jù)庫連接數(shù)來設(shè)定的。無論這些數(shù)據(jù)庫連接是否被使用,連接池都將一直保證至少擁有這么多的連接數(shù)量。連接池的最大數(shù)據(jù)庫連接數(shù)量限定了這個連接池能占有的最大連接數(shù),當應(yīng)用程序向連接池請求的連接數(shù)超過最大連接數(shù)量時,這些請求將被加入到等待隊列中。
數(shù)據(jù)庫連接池工作原理:
數(shù)據(jù)庫連接池工作原理
數(shù)據(jù)庫連接池技術(shù)的優(yōu)點
資源重用:
①由于數(shù)據(jù)庫連接得以重用,避免了頻繁創(chuàng)建,釋放連接引起的大量性能開銷。在減少系統(tǒng)消耗的基礎(chǔ)上,另一方面也增加了系統(tǒng)運行環(huán)境的平穩(wěn)性。
更快的系統(tǒng)反應(yīng)速度: 數(shù)據(jù)庫連接池在初始化過程中,往往已經(jīng)創(chuàng)建了若干數(shù)據(jù)庫連接置于連接池中備用。此時連接的初始化工作均已完成。對于業(yè)務(wù)請求處理而言,直接利用現(xiàn)有可用連接,避免了數(shù)據(jù)庫連接初始化和釋放過程的時間開銷,從而減少了系統(tǒng)的響應(yīng)時間
新的資源分配手段: 對于多應(yīng)用共享同一數(shù)據(jù)庫的系統(tǒng)而言,可在應(yīng)用層通過數(shù)據(jù)庫連接池的配置,實現(xiàn)某一應(yīng)用最大可用數(shù)據(jù)庫連接數(shù)的限制,避免某一應(yīng)用獨占所有的數(shù)據(jù)庫資源
統(tǒng)一的連接管理,避免數(shù)據(jù)庫連接泄露: 在較為完善的數(shù)據(jù)庫連接池實現(xiàn)中,可根據(jù)預(yù)先的占用超時設(shè)定,強制回收被占用連接,從而避免了常規(guī)數(shù)據(jù)庫連接操作中可能出現(xiàn)的資源泄露
三、兩種開源的數(shù)據(jù)庫連接池
JDBC 的數(shù)據(jù)庫連接池使用 javax.sql.DataSource 來表示,DataSource 只是一個接口,該接口通常由服務(wù)器(Weblogic, WebSphere, Tomcat)提供實現(xiàn),也有一些開源組織提供實現(xiàn): ①DBCP 數(shù)據(jù)庫連接池 ②C3P0 數(shù)據(jù)庫連接池
DataSource 通常被稱為數(shù)據(jù)源,它包含連接池和連接池管理兩個部分,習(xí)慣上也經(jīng)常把 DataSource稱為連接池
數(shù)據(jù)源和數(shù)據(jù)庫連接不同,數(shù)據(jù)源無需創(chuàng)建多個,它是產(chǎn)生數(shù)據(jù)庫連接的工廠,因此整個應(yīng)用只需要一個數(shù)據(jù)源即可。
當數(shù)據(jù)庫訪問結(jié)束后,程序還是像以前一樣關(guān)閉數(shù)據(jù)庫連接:conn.close(); 但上面的代碼并沒有關(guān)閉數(shù)據(jù)庫的物理連接,它僅僅把數(shù)據(jù)庫連接釋放,歸還給了數(shù)據(jù)庫連接池。
總結(jié)
以上是生活随笔為你收集整理的c3p0 服务启动获取连接超时_JDBC数据库连接池的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: matlab窗函数 响应,matlab窗
- 下一篇: metinfo mysql 数据表_《M