最近幾天無聊啊,所以就來看看Java基礎(chǔ),雖然學習java有一段時間了,但是對Java連接池一直很陌生,就對照相關(guān)資料,自己寫了一個,希望高手指教!!
本例子只有三個文件,下面是其源碼
resourceBundle.properties文件
connection.username=sa
connection.password=sa
connection.url=jdbc:sqlserver://localhost:1433;databaseName=collectionpool connection.driverClass=com.microsoft.jdbc.sqlserver.SQLServerDriver
connection.poolSize=20
ResourceManager.java文件
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類
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)造方法,獲得本類的對象,通過getIstance方法。
*/
private DbConnectionPool() {
pool = new ArrayList<Connection>();
this.createConnection();
}
/**
*得到當前連接池的一個實例
*/
publicstatic DbConnectionPool getInstance() {
if (instance == null) {
instance = new DbConnectionPool();
}
returninstance;
}
/**
*得到連接池中的一個連接
*/
publicsynchronized Connection getConnection() {
if (pool.size() > 0) {
Connection conn = pool.get(0);
pool.remove(conn);
return conn;
} else {
returnnull;
}
}
/**
*創(chuàng)建初始的數(shù)據(jù)庫連接
*/
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();
}
}
}
}
接下來在說一下,現(xiàn)在主流的java開源的連接池:
1.C3P0 :是一個開放源代碼的JDBC連接池,它在lib目錄中與Hibernate一起發(fā)布,包括了實現(xiàn)jdbc3和jdbc2擴展規(guī)范說明的Connection 和Statement 池的DataSources 對象。參考網(wǎng)站:
http://sourceforge.net/projects/c30/
2.Proxool :是一個Java SQL Driver驅(qū)動程序,提供了對你選擇的其它類型的驅(qū)動程序的連接池封裝。可以非常簡單的移植到現(xiàn)存的代碼中。完全可配置。快速,成熟,健壯。可以透明地為你現(xiàn)存的JDBC驅(qū)動程序增加連接池功能。 參考網(wǎng)站:
http://proxool.sourceforge.net
3.Jakarta DBCP :是一個依賴Jakarta commons-pool對象池機制的數(shù)據(jù)庫連接池.DBCP可以直接的在應用程序用使用。參考網(wǎng)站:
http://jakarta.apache.org/commons/dbcp/
4.ctionBroker :DBCP是一個依賴Jakarta commons-pool對象池機制的數(shù)據(jù)庫連接池.DBCP可以直接的在應用程序用使用。參考網(wǎng)站:
http://jakarta.apache.org/commons/dbcp/
5.DBPool :是一個高效的易配置的數(shù)據(jù)庫連接池。它除了支持連接池應有的功能之外,還包括了一個對象池使你能夠開發(fā)一個滿足自已需求的數(shù)據(jù)庫連接池。參考網(wǎng)站:
http://homepages.nildram.co.uk/~slink/java/DBPool/
6.XAPool :是一個高效的易配置的數(shù)據(jù)庫連接池。它除了支持連接池應有的功能之外,還包括了一個對象池使你能夠開發(fā)一個滿足自已需求的數(shù)據(jù)庫連接池。參考網(wǎng)站:
http://xapool.experlog.com/
7.SmartPool :SmartPool是一個連接池組件,它模仿應用服務器對象池的特性。SmartPool能夠解決一些臨界問題如連接泄漏(connection leaks),連接阻塞,打開的JDBC對象如Statements,PreparedStatements等. SmartPool的特性包括支持多個pools,自動關(guān)閉相關(guān)聯(lián)的JDBC對象, 在所設(shè)定time-outs之后察覺連接泄漏,追蹤連接使用情況, 強制啟用最近最少用到的連接,把SmartPool"包裝"成現(xiàn)存的一個pool等。參考網(wǎng)站:
http://smartpool.sourceforge.net/
8.MiniConnectionPoolManager :MiniConnectionPoolManager是一個輕量級JDBC數(shù)據(jù)庫連接池。它只需要Java1.5(或更高)并且沒有依賴第三方包。參考網(wǎng)站:
http://www.source-code.biz/snippets/java/8.htm
名稱: ?4C.ESL | .↗Evon
口號: 遇到新問題?先要尋找一個方案乄而不是創(chuàng)造一個方案こ
mail: 聯(lián)系我