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