最近几天无聊啊,所以就来看看Java基础,虽然学习java有一段时间了,但是对Java连接池一直很陌生,就对照相关资 料,自己写了一个,希望高手指教!!
本例子只有三个文件,下面是其源码
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;
/**
*单粒模式私有构造方法,获得本类的对象,通过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;
}
}
/**
*创建初始的数据库连接
*/
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);
}
/**
*关闭连接池中的所有连接
*/
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();
}
}
}
}