『壹』 為什麼說Druid是「最好的資料庫連接池」
1、可以監控資料庫訪問性能,Druid內置提供了一個功能強大的StatFilter插件,能夠詳細統計sql的執行性能,這對於線上分析資料庫訪問性能有幫助。
2、資料庫密碼加密。直接把資料庫密碼寫在配置文件中,這是不好的行為,容易導致安全問題。DruidDruiver和DruidDataSource都支持PasswordCallback。
3、SQL執行日誌,Druid提供了不同的LogFilter,能夠支持Common-Logging、Log4j和JdkLog,你可以按需要選擇相應的LogFilter,監控你應用的資料庫訪問情況。
4、擴展JDBC,如果你要對JDBC層有編程的需求,可以通過Druid提供的Filter機制,很方便編寫JDBC層的擴展插件。
『貳』 資料庫連接池有什麼作用為什麼spring中需要配置那個連接池
連接池的作用就是你要大量訪問資料庫的時候有用。
可以提高數據訪問的速率!
『叄』 簡單介紹連接池的優點和原理。
連接池運作原理在實際應用開發中,特別是在WEB應用系統中,如果JSP、Servlet或EJB使用JDBC直接訪問資料庫中的數據,每一次數據訪問請求都必須經歷建立資料庫連接、打開資料庫、存取數據和關閉資料庫連接等步驟,而連接並打開資料庫是一件既消耗資源又費時的工作,如果頻繁發生這種資料庫操作,系統的性能必然會急劇下降,甚至會導致系統崩潰。資料庫連接池技術是解決這個問題最常用的方法,在許多應用程序伺服器(例如:Weblogic,WebSphere,JBoss)中,基本都提供了這項技術,無需自己編程,但是,深入了解這項技術是非常必要的。資料庫連接池技術的思想非常簡單,將資料庫連接作為對象存儲在一個Vector對象中,一旦資料庫連接建立後,不同的資料庫訪問請求就可以共享這些連接,這樣,通過復用這些已經建立的資料庫連接,可以克服上述缺點,極大地節省系統資源和時間。資料庫連接池的主要操作如下:(1)建立資料庫連接池對象(伺服器啟動)。(2)按照事先指定的參數創建初始數量的資料庫連接(即:空閑連接數)。(3)對於一個資料庫訪問請求,直接從連接池中得到一個連接。如果資料庫連接池對象中沒有空閑的連接,且連接數沒有達到最大(即:最大活躍連接數),創建一個新的資料庫連接。(4)存取資料庫。(5)關閉資料庫,釋放所有資料庫連接(此時的關閉資料庫連接,並非真正關閉,而是將其放入空閑隊列中。如實際空閑連接數大於初始空閑連接數則釋放連接)。(6)釋放資料庫連接池對象(伺服器停止、維護期間,釋放資料庫連接池對象,並釋放所有連接)。連接池的實現1、連接池模型 本文討論的連接池包括一個連接池類(DBConnectionPool)和一個連接池管理類(DBConnetionPoolManager)。連接池類是對某一資料庫所有連接的「緩沖池」,主要實現以下功能:①從連接池獲取或創建可用連接;②使用完畢之後,把連接返還給連接池;③在系統關閉前,斷開所有連接並釋放連接佔用的系統資源;④還能夠處理無效連接(原來登記為可用的連接,由於某種原因不再可用,如超時,通訊問題),並能夠限制連接池中的連接總數不低於某個預定值和不超過某個預定值。 連接池管理類是連接池類的外覆類(wrapper),符合單例模式,即系統中只能有一個連接池管理類的實例。其主要用於對多個連接池對象的管理,具有以下功能:①裝載並注冊特定資料庫的JDBC驅動程序;②根據屬性文件給定的信息,創建連接池對象;③為方便管理多個連接池對象,為每一個連接池對象取一個名字,實現連接池名字與其實例之間的映射;④跟蹤客戶使用連接情況,以便需要是關閉連接釋放資源。連接池管理類的引入主要是為了方便對多個連接池的使用和管理,如系統需要連接不同的資料庫,或連接相同的資料庫但由於安全性問題,需要不同的用戶使用不同的名稱和密碼。 2、連接池實現 下面給出連接池類和連接池管理類的主要屬性及所要實現的基本介面: public class DBConnectionPool implements TimerListener{ private int checkedOut;//已被分配出去的連接數 private ArrayList freeConnections = new ArrayList();//容器,空閑池,根據//創建時間順序存放已創建但尚未分配出去的連接 private int minConn;//連接池裡連接的最小數量 private int maxConn;//連接池裡允許存在的最大連接數 private String name;//為這個連接池取個名字,方便管理 private String password;//連接資料庫時需要的密碼 private String url;//所要創建連接的資料庫的地址 private String user;//連接資料庫時需要的用戶名 public Timer timer;//定時器 public DBConnectionPool(String name, String URL, String user, String password, int maxConn)//公開的構造函數 public synchronized void freeConnection(Connection con) //使用完畢之後,//把連接返還給空閑池 public synchronized Connection getConnection(long timeout)//得到一個連接,//timeout是等待時間 public synchronized void release()//斷開所有連接,釋放佔用的系統資源 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 ();//以name/value的形式存取連接池//對象的名字及連接池對象 static synchronized public DBConnectionManager getInstance()//如果唯一的//實例instance已經創建,直接返回這個實例;否則,調用私有構造函數,創//建連接池管理類的唯一實例 private DBConnectionManager()//私有構造函數,在其中調用初始化函數init() public void freeConnection(String name, Connection con)// 釋放一個連接,//name是一個連接池對象的名字 public Connection getConnection(String name)//從名字為name的連接池對象//中得到一個連接 public Connection getConnection(String name, long time)//從名字為name //的連接池對象中取得一個連接,time是等待時間 public synchronized void release()//釋放所有資源 private void createPools(Properties props)//根據屬性文件提供的信息,創建//一個或多個連接池 private void init()//初始化連接池管理類的唯一實例,由私有構造函數調用 private void loadDrivers(Properties props)//裝載資料庫驅動程序 } 3、連接池使用 上面所實現的連接池在程序開發時如何應用到系統中呢?下面以Servlet為例說明連接池的使用。 Servlet的生命周期是:在開始建立servlet時,調用其初始化(init)方法。之後每個用戶請求都導致一個調用前面建立的實例的service方法的線程。最後,當伺服器決定卸載一個servlet時,它首先調用該servlet的 destroy方法。 根據servlet的特點,我們可以在初始化函數中生成連接池管理類的唯一實例(其中包括創建一個或多個連接池)。如: public void init() throws ServletException { connMgr = DBConnectionManager.getInstance(); } 然後就可以在service方法中通過連接池名稱使用連接池,執行資料庫操作。最後在destroy方法中釋放佔用的系統資源,如: public void destroy() { connMgr.release(); super.destroy(); } 結束語在使用JDBC進行與資料庫有關的應用開發中,資料庫連接的管理是一個難點。很多時候,連接的混亂管理所造成的系統資源開銷過大成為制約大型企業級應用效率的瓶頸。對於眾多用戶訪問的Web應用,採用資料庫連接技術的系統在效率和穩定性上比採用傳統的其他方式的系統要好很多。本文闡述了使用JDBC訪問資料庫的技術?討論了基於連接池技術的資料庫連接管理的關鍵問題並給出了一個實現模型。文章所給出的是連接池管理程序的一種基本模式,為提高系統的整體性能,在此基礎上還可以進行很多有意義的擴展。 http://www.webdevelopersjournal.com/columns/connection_pool.html http://www.webdevelopersjournal.com/columns/DBConnectionManager.java
『肆』 資料庫連接池是什麼
問題一:什麼是資料庫連接池,有什麼作用? 資料庫連接是一種有限的昂貴的資源,
資料庫連接影響到程序的性能指標。
資料庫連接池正是針對這個問題提出來的。資料庫連接池負責分配、
管理和釋放資料庫連接,
它允許應用程序重復使用一個現有的資料庫連接,
而再不是重新建立一個;
釋放空閑時間超過最大空閑時間的資料庫連接來避免因為沒有釋放數
據庫連接而引起的資料庫連接遺漏。
這項技術能明顯提高對資料庫操作的性能。
問題二:什麼是資料庫連接池?謝謝了 資料庫連接池,簡稱dbcp databa績e connection pool
存在意義:
資料庫的連接是非常耗費系統資源的,一個應用通常都是需要與資料庫打交道,也就需要經常連接資料庫,這樣導致浪費大量系統資源;
連接池的原理就是:我事先創建好幾個資料庫連接放著,當我的系統需要操作資料庫時就從連接池裡直接拿連接,並將這個連接標記為 忙 ;用完後在放會池中,標記為 空閑;;;
當連接池裡的連接都在被使用,如果此時還要連接,連接池就會在創建連接放到池裡,,這些連接的數量,都是在配置文件里由你控制的
問題三:資料庫連接池是什麼意思? 像打開關閉資料庫連接這種和資料庫的交互可能是很費時的,尤其是當客戶端數量增加的時候,會消耗大量的資源,成本是非常高的。可以在應用伺服器啟動的時候建立很多個資料庫連接並維護在一個池中。連接請求由池中的連接提供。在連接使用完畢以後,把連接歸還到池中,以用於滿足將來更多的請求。
問題四:資料庫連接池的工作機制是什麼? 為什麼要使用資料庫連接池?
答:
由於創建連接的代價是很高的, 我們每次訪問資料庫都重新創建連接的話是非常消耗性的.
我們可以再程序啟動的時候先創建出一些連接, 放在一個 *** 中, 訪問資料庫的時候從 *** 中獲取, 使用結束再放回 *** 中.
這樣做只是在程序啟動的時候消耗性能去創建連接, 每次訪問資料庫的時候都是從內存中獲取連接, 可以大大提升效率.
注意事項:
由於池中增刪非常頻繁, 使用 *** LinkedList效率較高
*** 中所有連接都被佔用時創建新連接, 但需要注意連接總數
使用組合模式/動態代理處理釋放連接的方法, 當運行close方法時, 將連接放回池中
關於資料庫連接池:
資料庫連接是一種關鍵的有限的昂貴的資源,這一點在多用戶的網頁應用程序中體現得尤為突出。對資料庫連接的管理能顯著影響到整個應用程序的伸縮性和健壯性,影響到程序的性能指標。資料庫連接池正是針對這個問題提出來的。
資料庫連接池負責分配、管理和釋放資料庫連接,它允許應用程序重復使用一個現有的資料庫連接,而再不是重新建立一個;釋放空閑時間超過最大空閑時間的資料庫連接來避免因為沒有釋放資料庫連接而引起的資料庫連接遺漏。這項技術能明顯提高對資料庫操作的性能。
資料庫連接池在初始化時將創建一定數量的資料庫連接放到連接池中,這些資料庫連接的數量是由最小資料庫連接數來設定的。無論這些資料庫連接是否被 使用,連接池都將一直保證至少擁有這么多的連接數量。連接池的最大資料庫連接數量限定了這個連接池能佔有的最大連接數,當應用程序向連接池請求的連接數超 過最大連接數量時,這些請求將被加入到等待隊列中。
資料庫連接池的最小連接數和最大連接數的設置要考慮到下列幾個因素:
1) 最小連接數是連接池一直保持的資料庫連接,所以如果應用程序對資料庫連接的使用量不大,將會有大量的資料庫連接資源被浪費;
2) 最大連接數是連接池能申請的最大連接數,如果資料庫連接請求超過此數,後面的資料庫連接請求將被加入到等待隊列中,這會影響之後的資料庫操作。
3) 如果最小連接數與最大連接數相差太大,那麼最先的連接請求將會獲利,之後超過最小連接數量的連接請求等價於建立一個新的資料庫連接。不過,這些大於最小連接數的資料庫連接在使用完不會馬上被釋放,它將被放到連接池中等待重復使用或是空閑超時後被釋放。
J2EE伺服器啟動時會建立一定數量的池連接,並一直維持不少於此數目的池連接。
調用:客戶端程序需要連接時,池驅動程序會返回一個未使用的池連接並將其表記為 忙。如果當前沒有空閑連接,池驅動程序就新建一定數量的連接,新建連接的數量有配置參數決定。
釋放:當使用的池連接調用完成後,池驅動程序將此連接表記為空閑, 其他調用就可以使用這個連接
問題五:資料庫連接池的作用是什麼? 連接池是被j2ee伺服器打開和維護的 對應1、2、4的JDBC驅動程序 連接池一般比直接連接更有優越性 因為它提高了性能的同時還保存了 寶貴的資源。 打開資料庫連接時CPU和網路的重要 任務,因此,在整個應用程序的使用過程 當中重復的打開直接連接將導致性能的下降。 而池連接只在伺服器啟動時打開一次,從而 消除了這種性能問題。 另外,因為連接只用於很短的時間, 所以,連接可以被有效共享, 而且有關連接參數的特有信息, 只對池驅動程序有效, 如資料庫用戶名稱和密碼, 從而增強了系統的安全性和可管理性。
問題六:資料庫連接池的工作機制是什麼 連接池的實現是以空間換時間。
J2EE伺服器啟動時會建立一定數量的池連接,並一直維持不少於此數目的池連接。客戶端程序需要連接時,池驅動程序會返回一個未使用的池連接並將其表記為忙。如果當前沒有空閑連接,池驅動程序就新建一定數量的連接,新建連接的數量有配置參數決定。當使用的池連接調用完成後,池驅動程序將此連接表記為空閑,其他調用就可以使用這個連接。
問題七:資料庫連接池的作用是什麼? 連接池是被j2ee伺服器打開和維護的
對應1、2、4的JDBC驅動程序
連接池一般比直接連接更有優越性
因為它提高了性能的同時還保存了
寶貴的資源。
打開資料庫連接時CPU和網路的重要
任務,因此,在整個應用程序的使用過程
當中重復的打開直接連接將導致性能的下降。
而池連接只在伺服器啟動時打開一次,從而
消除了這種性能問題。
另外,因為連接只用於很短的時間,
所以,連接可以被有效共享,
而且有關連接參數的特有信息,
只對池驅動程序有效,
如資料庫用戶名稱和密碼,
從而增強了系統的安全性和可管理性。
問題八:開源的資料庫連接池和普通的資料庫連接池有什麼區別 在項目中嘗試使用了幾種開源的資料庫連接池實現。一種是dbcp,一種是c3p0,還有一種是proxool,這幾種資料庫連接池都可以很容易的在Spring配置起來。性能總體上上感覺dbcp為最優,因為穩定性和並發性都是我的項目需要的。
項目中經過反復測試,如果web server和資料庫server不是同一個機器的話,在斷網時間比較短的時間內三種資料庫連接池都能較好的重連,但是在斷網時間超過8個鍾頭 proxool就不能恢復工作了。但是dbcp卻能很快的重新連接。實際生產環境中穩定性和總體性能是最重要的,都需要做相應的測試才能放心的讓系統上生產線。
這里給出項目中資料庫連接池配置:
dbcp的jndi:13 4 java:p/env/jdbc/mysql5 6 proxool(proxool-0.9.0RC1)的配置: .mysql.jdbc.Driver jdbc:mysql:ip:3306/dbname?useUnicode=true&characterEncoding=utf8&autoReconnect=true user password 500 15000 select CURRENT_DATE true mysqlProxoolDataSource 1000 false 建議使用DBCP,配置在tomcat中,然後在spring中使用jndi的形式獲取。 c3p0(c3p0-0.9.0): 1 3 4 .mysql.jdbc.Driver 5 6 7 jdbc:mysql:192.168.0.225:3306/sendinmdb?useUnicode=true&characterEncoding=utf8&autoReconnect=true 8 9 10 ********11 12 13 ********14 15 16 10017 18 19 5020 21 22 10023 24 25 100026 27 28 3029 30 直接 & paste到spring配置文件里就可以使用了。 配置一些額外的tomcat 的DBCP連接池參數,也可以更好的使用到類似proxool提供的功能,只是dbcp更加穩定而已。tomcat/conf/context.xml中插入一個Resource元素: 解釋一下以下這些參數的含義:
validationQuery = select current_date()
testOnBorrow = true
testOnReturn = false
testWhileIdle = true
當 從池中獲取一個Connection後使用 select current_date() 來測試該資料庫連接的可用性,如果SQL語句返回結果則認為是一個有效的連接,否則將繼續測試知道可以拿到有效的連接。當返回Connection給池的時候不進行驗證,但是Connection空閑的時候就要進行認證。
timeBetweenEvictionRunsMillis = 15000
DBCP 清空線程睡眠的間隙,如值為負數則不運行該線程
numTestsPerEvictionRun = 10"......>>
問題九:sqlite 使用什麼資料庫連接池 資料庫連接是一種有限的昂貴的資源,
資料庫連接影響到程序的性能指標。
資料庫連接池正是針對這個問題提出來的。資料庫連接池負責分配、
管理和釋放資料庫連接,
它允許應用程序重復使用一個現有的資料庫連接,
而再不是重新建立一個;
釋放空閑時間超過最大空閑時間的資料庫連接來避免因為沒有釋放數
據庫連接而引起的資料庫連接遺漏。
這項技術能明顯提高對資料庫操作的性能。
問題十:說出數據連接池的工作機制是什麼? 以典型的資料庫連接池為例:首先普通的資料庫訪問是這樣的:程序和資料庫建立連接,發送數據操作的指令,完成後斷開連接。等下一次請求的時候重復這個過程,即每個請求都需要和資料庫建立連接和斷開連接,這樣當數據量大的時候系統的消耗是很大的。連接池就是為了解決這個問題:在一個空間中預先建立好一定數量的連接,當程序請求數據時直接使用池中的現存的連接,不需要重復建立連接和斷開的過程,節省了時間提高了性能
『伍』 什麼是資料庫連接池
資料庫連接池,簡稱dbcp database connection pool
存在意義:
資料庫的連接是非常耗費系統資源的,一個應用通常都是需要與資料庫打交道,也就需要經常連接資料庫,這樣導致浪費大量系統資源;
連接池的原理就是:我事先創建好幾個資料庫連接放著,當我的系統需要操作資料庫時就從連接池裡直接拿連接,並將這個連接標記為 忙 ;用完後在放會池中,標記為 空閑;;;
當連接池裡的連接都在被使用,如果此時還要連接,連接池就會在創建連接放到池裡,,這些連接的數量,都是在配置文件里由你控制的
『陸』 資料庫連接池的原理是什麼
資料庫連接池的基本原理是在內部對象池中維護一定數量的資料庫連接敗仿,並對外暴露資料庫連接差枯喚獲取和返回方法。如:
外部使用者可通過getConnection 方法獲取連接,使用完畢後再通過releaseConnection 方法將連接返回,注虛凱意此時連接並沒有關閉,而是由連接池管理器回收,並為下一次使用做好准備。