Java連接池總結(jié)復(fù)習(xí)及推薦
Java連接池是Java學(xué)習(xí)者必知的一個(gè)基礎(chǔ)概念。下面給出一個(gè)例子,總結(jié)了一些學(xué)習(xí)Java連接池的一些心得。本例子只有三個(gè)文件,下面是其源碼
resourceBundle.properties文件
ResourceManager.java文件
- connection.username=sa
- connection.password=sa
- connection.url=jdbc:sqlserver://localhost:1433;databaseName=collectionpool connection.driverClass=com.microsoft.jdbc.sqlserver.SQLServerDriver
- connection.poolSize=20
- package org.topCSA.connection.db.Resource;
- import java.util.ResourceBundle;
- publicclass ResourceManager {
- privatestatic ResourceBundle r;
- static{
- r = ResourceBundle.getBundle("resourceBundle");
- }
- publicstatic String getDriverClass(){
- returnr.getString("connection.driverClass");
- }
- publicstatic String getUrl(){
- returnr.getString("connection.url");
- }
- publicstatic String getUsername(){
- returnr.getString("connection.username");
- }
- publicstatic String getPassword(){
- returnr.getString("connection.password");
- }
- publicstaticintgetPoolSize(){
- int poolSize = Integer.valueOf(r.getString("connection.poolSize"));
- return poolSize;
- }
- publicstaticvoid refresh(){
- r = ResourceBundle.getBundle("resourceBundle");
- }
- }
DbConnectionPool.java類(lèi)
- package org.topCSA.connection.db;
- import java.sql.Connection;
- import java.sql.DriverManager;
- import java.sql.SQLException;
- import java.util.ArrayList;
- import java.util.List;
- import org.topCSA.connection.db.Resource.ResourceManager;
- publicclass DbConnectionPool {
- private List<Connection> pool;
- privateintpoolSize = 1;
- private Connection conn = null;
- privatestatic DbConnectionPool instance = null;
- /**
- *單粒模式私有構(gòu)造方法,獲得本類(lèi)的對(duì)象,通過(guò)getIstance方法。
- */
- private DbConnectionPool() {
- pool = new ArrayList<Connection>();
- this.createConnection();
- }
- /**
- *得到當(dāng)前連接池的一個(gè)實(shí)例
- */
- publicstatic DbConnectionPool getInstance() {
- if (instance == null) {
- instance = new DbConnectionPool();
- }
- returninstance;
- }
- /**
- *得到連接池中的一個(gè)連接
- */
- publicsynchronized Connection getConnection() {
- if (pool.size() > 0) {
- Connection conn = pool.get(0);
- pool.remove(conn);
- return conn;
- } else {
- returnnull;
- }
- }
- /**
- *創(chuàng)建初始的數(shù)據(jù)庫(kù)連接
- */
- privatevoid createConnection() {
- int temp = ResourceManager.getPoolSize();
- if(temp > 0){
- this.poolSize = temp;
- }
- for (int i = 0; i < poolSize; i++) {
- try {
- Class.forName(ResourceManager.getDriverClass());
- conn = DriverManager.getConnection(ResourceManager.getUrl(),ResourceManager.getUsername(),ResourceManager.getPassword());
- pool.add(conn);
- } catch (ClassNotFoundException e) {
- e.printStackTrace();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- }
- /**
- *用完將連接放回到連接池中
- *
- *@paramconn
- */
- publicsynchronizedvoid release(Connection conn) {
- pool.add(conn);
- }
- /**
- *關(guān)閉連接池中的所有連接
- */
- publicsynchronizedvoid closePool() {
- for (int i = 0; i < pool.size(); i++) {
- try {
- conn = ((Connection) pool.get(i));
- conn.close();
- pool.remove(i);
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- }
- }
接下來(lái)在說(shuō)一下,現(xiàn)在主流的開(kāi)源java連接池:
1.C3P0 :是一個(gè)開(kāi)放源代碼的JDBC連接池,它在lib目錄中與Hibernate一起發(fā)布,包括了實(shí)現(xiàn)jdbc3和jdbc2擴(kuò)展規(guī)范說(shuō)明的Connection 和Statement 池的DataSources 對(duì)象。參考網(wǎng)站: http://sourceforge.net/projects/c30/
2.Proxool :是一個(gè)Java SQL Driver驅(qū)動(dòng)程序,提供了對(duì)你選擇的其它類(lèi)型的驅(qū)動(dòng)程序的連接池封裝??梢苑浅:?jiǎn)單的移植到現(xiàn)存的代碼中。完全可配置??焖?,成熟,健壯??梢酝该鞯貫槟悻F(xiàn)存的JDBC驅(qū)動(dòng)程序增加連接池功能。 參考網(wǎng)站: http://proxool.sourceforge.net
3.Jakarta DBCP :是一個(gè)依賴(lài)Jakarta commons-pool對(duì)象池機(jī)制的數(shù)據(jù)庫(kù)連接池.DBCP可以直接的在應(yīng)用程序用使用。參考網(wǎng)站: http://jakarta.apache.org/commons/dbcp/
4.ctionBroker :DBCP是一個(gè)依賴(lài)Jakarta commons-pool對(duì)象池機(jī)制的數(shù)據(jù)庫(kù)連接池.DBCP可以直接的在應(yīng)用程序用使用。參考網(wǎng)站:http://jakarta.apache.org/commons/dbcp/
5.DBPool :是一個(gè)高效的易配置的數(shù)據(jù)庫(kù)連接池。它除了支持連接池應(yīng)有的功能之外,還包括了一個(gè)對(duì)象池使你能夠開(kāi)發(fā)一個(gè)滿(mǎn)足自已需求的數(shù)據(jù)庫(kù)連接池。參考網(wǎng)站:http://homepages.nildram.co.uk/~slink/java/DBPool/
6.XAPool :是一個(gè)高效的易配置的數(shù)據(jù)庫(kù)連接池。它除了支持連接池應(yīng)有的功能之外,還包括了一個(gè)對(duì)象池使你能夠開(kāi)發(fā)一個(gè)滿(mǎn)足自已需求的數(shù)據(jù)庫(kù)連接池。參考網(wǎng)站:http://xapool.experlog.com/
7.SmartPool :SmartPool是一個(gè)連接池組件,它模仿應(yīng)用服務(wù)器對(duì)象池的特性。SmartPool能夠解決一些臨界問(wèn)題如連接泄漏(connection leaks),連接阻塞,打開(kāi)的JDBC對(duì)象如Statements,PreparedStatements等. SmartPool的特性包括支持多個(gè)pools,自動(dòng)關(guān)閉相關(guān)聯(lián)的JDBC對(duì)象, 在所設(shè)定time-outs之后察覺(jué)連接泄漏,追蹤連接使用情況, 強(qiáng)制啟用最近最少用到的連接,把SmartPool"包裝"成現(xiàn)存的一個(gè)pool等。參考網(wǎng)站:http://smartpool.sourceforge.net/
8.MiniConnectionPoolManager :MiniConnectionPoolManager是一個(gè)輕量級(jí)JDBC數(shù)據(jù)庫(kù)連接池。它只需要Java1.5(或更高)并且沒(méi)有依賴(lài)第三方包。參考網(wǎng)站:http://www.source-code.biz/snippets/java/8.htm
本文來(lái)自xcp的博客:《java 連接池 總結(jié) 復(fù)習(xí)》
【編輯推薦】