`

数据库连接池的简单实现

阅读更多

这是我以前写的一段程序,试图按着自己对多线程与JDBC的理解,实现数据库链接池的功能。运行时也还正常,就是感觉程序太简单。现在看起来也的确太简单,好多复杂的情形都没有考虑到。

 

包结构:
org.eleaf.java.eshop.db/
|---db.properties
|---Database.java
|---ConnectionPool.java

db.properties:配置文件

##--------------
# MySql
#--------------
#db.driver=com.mysql.jdbc.Driver
#db.username=bitan
#db.password=abcd
#db.url=jdbc:mysql://localhost/eshop?useUnicode=true&characterEncoding=GBK
#db.maxConnections=10
#--------------
# Sql Server
#--------------
db.driver=com.jnetdirect.jsql.JSQLDriver
db.username=sa
db.password=
db.url=jdbc:JSQLConnect://server/database=xxxx
db.maxConnections=10
#--------------
# Oracle
#--------------
#db.driver=oracle.jdbc.driver.OracleDriver
#db.username=xxx
#db.password=xxx
#db.url=jdbc:oracle:thin:@SERVER:1521:ORACLEDB
#db.maxConnections=10

 

 

Database.java:从配置文件读取信息,创建数据库连接

/*
* Created on 2005-2-19
*
*/
package org.eleaf.java.eshop.db;

import java.sql.*;
import java.io.*;
import org.eleaf.java.eshop.mvc.util.*;


public class Database {
private static Database instance;
private final String propFile="db.properties";
private final String driver;
private final String url;
private final String username;
private final String password;
private final int maxConnections;
public static Database getInstance() throws SQLException{
if (instance == null) {
instance = new Database();
}
return instance;
}
private Database() throws SQLException{
try {
PropertiesParser parser = new PropertiesParser(propFile, this);
driver = parser.getValue("db.driver");
url = parser.getValue("db.url");
username = parser.getValue("db.username");
password = parser.getValue("db.password");
String strMaxConns = parser.getValue("db.maxConnections");
maxConnections = Integer.parseInt(strMaxConns);
} catch (IOException e) {
throw new SQLException("IOException: " + e.getMessage());
}
}

/**
* @return Returns the driver.
*/
public String getDriver() {
return driver;
}
/**
* @return Returns the password.
*/
public String getPassword() {
return password;
}
/**
* @return Returns the url.
*/
public String getUrl() {
return url;
}
/**
* @return Returns the username.
*/
public String getUsername() {
return username;
}

/**
* @return Returns the maxConnections.
*/
public int getMaxConnections() {
return maxConnections;
}
/**
* @return Returns the propFile.
*/
public String getPropFile() {
return propFile;
}
Connection getConnection() throws SQLException{
Connection conn = null;
try {
Class.forName(driver).newInstance();
conn = DriverManager.getConnection(url, username, password);
} catch (Exception e) {
throw new SQLException(e.getMessage());
}
return conn;
}
}



ConnectionPool.java:数据库连接池

/*
* Created on 2005-3-24
*
*/
package org.eleaf.java.eshop.db;

import java.sql.*;
import java.util.*;


public class ConnectionPool {
<!--StartFragment -->private final int MAX_CONNS; //最大连接数
private Vector freeConns;
//当前可用空闲连接集合
private int activeConns; //当前活动连接
private Database db; //包含JDBC驱动、URL、用户名、密码等基本信息并生成数据库连接的一个 类。
<!--StartFragment -->private static ConnectionPool instance;
//单例模式
public static synchronized ConnectionPool getInstance() throws SQLException {
if (instance == null ) {
instance = new ConnectionPool();
}
return instance;
}
public ConnectionPool() throws SQLException {
db = Database.getInstance();
freeConns = new Vector();
MAX_CONNS = db.getMaxConnections();
activeConns = 0;
showInfo("ConnectionPool()");
}
<!--StartFragment -->
//创建新连接
private Connection createNewConnection() throws SQLException {
showInfo("createNewConnection()");
return db.getConnection();
}
<!--StartFragment -->
//从连接池中取得连接
public synchronized Connection getConnection() throws SQLException {
while (activeConns >= MAX_CONNS) {<!--StartFragment --> //如果活动连接数超过了最大允许数,则等待1秒钟。
try {
wait(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
Connection conn = null;
if (freeConns.size() <= 0) {<!--StartFragment --> //如果当前可用空闲连接为0,则创建新连接
conn = createNewConnection();
activeConns++;
} else {
conn = (Connection) freeConns.get(0); <!--StartFragment --> //如果当前可用空闲连接不为0,则从池中取出第一个空闲连接。
freeConns.remove(0);
if (conn == null ) {
System.out.println("_______________");
conn = createNewConnection();
}
activeConns++;
}
showInfo("getConnection()");
return conn;
}
<!--StartFragment -->//线程程序执行完毕,要主动返回连接到连接池中。
public synchronized void returnConnection(Connection conn) throws SQLException {
if (conn == null || conn.isClosed()) {
return;
}
if (activeConns > MAX_CONNS) {
conn.close();
conn = null ;

} else {
freeConns.addElement(conn);
}
activeConns--;
showInfo("returnConnection(Connection)");
notify();<!--StartFragment --> //连接返回到池中后,通告其它等待取得连接的线程。
}
private void showInfo(String str) {
String t = Thread.currentThread().getName();
String tmp = t + " : " + str + " : activeConns=" + activeConns +
", freeConns=" + freeConns.size();
System.out.println(tmp);
}
<!--StartFragment -->
//一段测试程序
public static void main(String[] args) {
System.out.println("*************");
final ConnectionPool cp = ConnectionPool.getInstance();
Thread[] ths = new Thread[100];
for (int i = 0; i < ths.length; i++) {
ths[i] = new Thread(
new Runnable() {
public void run() {
Connection conn = cp.getConnection();
try {
cp.showInfo("start business...");
Thread.sleep(500);
cp.showInfo("end business...");
} catch (InterruptedException e) {
e.printStackTrace();
}
cp.returnConnection(conn);
}
}, "T" + (i + 1)
);
}
for (int i = 0; i < ths.length; i++) {
ths[i].start();
}
}
}


测试结果:

*************
main : ConnectionPool() : activeConns=0, freeConns=0
T1 : createNewConnection() : activeConns=0, freeConns=0
T1 : getConnection() : activeConns=1, freeConns=0
T1 : start business... : activeConns=1, freeConns=0
T2 : createNewConnection() : activeConns=1, freeConns=0
T2 : getConnection() : activeConns=2, freeConns=0
T2 : start business... : activeConns=2, freeConns=0
T3 : createNewConnection() : activeConns=2, freeConns=0
T3 : getConnection() : activeConns=3, freeConns=0
T3 : start business... : activeConns=3, freeConns=0
T4 : createNewConnection() : activeConns=3, freeConns=0
T4 : getConnection() : activeConns=4, freeConns=0
T4 : start business... : activeConns=4, freeConns=0
T5 : createNewConnection() : activeConns=4, freeConns=0
T5 : getConnection() : activeConns=5, freeConns=0
T5 : start business... : activeConns=5, freeConns=0
T6 : createNewConnection() : activeConns=5, freeConns=0
T6 : getConnection() : activeConns=6, freeConns=0
T6 : start business... : activeConns=6, freeConns=0
T7 : createNewConnection() : activeConns=6, freeConns=0
T7 : getConnection() : activeConns=7, freeConns=0
T7 : start business... : activeConns=7, freeConns=0
T8 : createNewConnection() : activeConns=7, freeConns=0
T8 : getConnection() : activeConns=8, freeConns=0
T8 : start business... : activeConns=8, freeConns=0
T9 : createNewConnection() : activeConns=8, freeConns=0
T9 : getConnection() : activeConns=9, freeConns=0
T9 : start business... : activeConns=9, freeConns=0
T10 : createNewConnection() : activeConns=9, freeConns=0
T10 : getConnection() : activeConns=10, freeConns=0
T10 : start business... : activeConns=10, freeConns=0
T1 : end business... : activeConns=10, freeConns=0
T1 : returnConnection(Connection) : activeConns=9, freeConns=1
T11 : getConnection() : activeConns=10, freeConns=0
T11 : start business... : activeConns=10, freeConns=0
T2 : end business... : activeConns=10, freeConns=0
T2 : returnConnection(Connection) : activeConns=9, freeConns=1
T12 : getConnection() : activeConns=10, freeConns=0
T12 : start business... : activeConns=10, freeConns=0
T3 : end business... : activeConns=10, freeConns=0
T3 : returnConnection(Connection) : activeConns=9, freeConns=1
T13 : getConnection() : activeConns=10, freeConns=0
T13 : start business... : activeConns=10, freeConns=0
T4 : end business... : activeConns=10, freeConns=0
T4 : returnConnection(Connection) : activeConns=9, freeConns=1
T14 : getConnection() : activeConns=10, freeConns=0
T14 : start business... : activeConns=10, freeConns=0
T5 : end business... : activeConns=10, freeConns=0
T5 : returnConnection(Connection) : activeConns=9, freeConns=1
T6 : end business... : activeConns=9, freeConns=1
T6 : returnConnection(Connection) : activeConns=8, freeConns=2
T15 : getConnection() : activeConns=9, freeConns=1
T15 : start business... : activeConns=9, freeConns=1
T7 : end business... : activeConns=10, freeConns=0
T16 : getConnection() : activeConns=10, freeConns=0
T16 : start business... : activeConns=9, freeConns=1
T7 : returnConnection(Connection) : activeConns=9, freeConns=1
T17 : getConnection() : activeConns=10, freeConns=0
T17 : start business... : activeConns=10, freeConns=0
T8 : end business... : activeConns=10, freeConns=0
T8 : returnConnection(Connection) : activeConns=9, freeConns=1
T18 : getConnection() : activeConns=10, freeConns=0
T18 : start business... : activeConns=10, freeConns=0
T9 : end business... : activeConns=10, freeConns=0
T9 : returnConnection(Connection) : activeConns=9, freeConns=1
T19 : getConnection() : activeConns=10, freeConns=0
T19 : start business... : activeConns=10, freeConns=0
T10 : end business... : activeConns=10, freeConns=0
T10 : returnConnection(Connection) : activeConns=9, freeConns=1
T20 : getConnection() : activeConns=10, freeConns=0
T20 : start business... : activeConns=10, freeConns=0
T11 : end business... : activeConns=10, freeConns=0
T11 : returnConnection(Connection) : activeConns=9, freeConns=1
T21 : getConnection() : activeConns=10, freeConns=0
T21 : start business... : activeConns=10, freeConns=0
T12 : end business... : activeConns=10, freeConns=0
T12 : returnConnection(Connection) : activeConns=9, freeConns=1
T22 : getConnection() : activeConns=10, freeConns=0
T22 : start business... : activeConns=10, freeConns=0
T13 : end business... : activeConns=10, freeConns=0
T13 : returnConnection(Connection) : activeConns=9, freeConns=1
T23 : getConnection() : activeConns=10, freeConns=0
T23 : start business... : activeConns=10, freeConns=0
T14 : end business... : activeConns=10, freeConns=0
T14 : returnConnection(Connection) : activeConns=9, freeConns=1
T24 : getConnection() : activeConns=10, freeConns=0
T24 : start business... : activeConns=10, freeConns=0
T15 : end business... : activeConns=10, freeConns=0
T15 : returnConnection(Connection) : activeConns=9, freeConns=1
T16 : end business... : activeConns=9, freeConns=1
T16 : returnConnection(Connection) : activeConns=8, freeConns=2
T25 : getConnection() : activeConns=9, freeConns=1
T25 : start business... : activeConns=9, freeConns=1
T26 : getConnection() : activeConns=10, freeConns=0
T17 : end business... : activeConns=10, freeConns=0
T26 : start business... : activeConns=10, freeConns=0
T17 : returnConnection(Connection) : activeConns=9, freeConns=1
T27 : getConnection() : activeConns=10, freeConns=0
T27 : start business... : activeConns=10, freeConns=0
T18 : end business... : activeConns=10, freeConns=0
T18 : returnConnection(Connection) : activeConns=9, freeConns=1
T28 : getConnection() : activeConns=10, freeConns=0
T28 : start business... : activeConns=10, freeConns=0
T19 : end business... : activeConns=10, freeConns=0
T19 : returnConnection(Connection) : activeConns=9, freeConns=1
T29 : getConnection() : activeConns=10, freeConns=0
T29 : start business... : activeConns=10, freeConns=0
T20 : end business... : activeConns=10, freeConns=0
T20 : returnConnection(Connection) : activeConns=9, freeConns=1
T39 : getConnection() : activeConns=10, freeConns=0
T39 : start business... : activeConns=10, freeConns=0
T21 : end business... : activeConns=10, freeConns=0
T21 : returnConnection(Connection) : activeConns=9, freeConns=1
T30 : getConnection() : activeConns=10, freeConns=0
T30 : start business... : activeConns=10, freeConns=0
T22 : end business... : activeConns=10, freeConns=0
T22 : returnConnection(Connection) : activeConns=9, freeConns=1
T31 : getConnection() : activeConns=10, freeConns=0
T31 : start business... : activeConns=10, freeConns=0
T23 : end business... : activeConns=10, freeConns=0
T23 : returnConnection(Connection) : activeConns=9, freeConns=1
T32 : getConnection() : activeConns=10, freeConns=0
T32 : start business... : activeConns=10, freeConns=0
T24 : end business... : activeConns=10, freeConns=0
T24 : returnConnection(Connection) : activeConns=9, freeConns=1
T33 : getConnection() : activeConns=10, freeConns=0
T33 : start business... : activeConns=10, freeConns=0
T25 : end business... : activeConns=10, freeConns=0
T25 : returnConnection(Connection) : activeConns=9, freeConns=1
T34 : getConnection() : activeConns=10, freeConns=0
T34 : start business... : activeConns=10, freeConns=0
T26 : end business... : activeConns=10, freeConns=0
T26 : returnConnection(Connection) : activeConns=9, freeConns=1
T27 : end business... : activeConns=9, freeConns=1
T27 : returnConnection(Connection) : activeConns=8, freeConns=2
T35 : getConnection() : activeConns=9, freeConns=1
T35 : start business... : activeConns=9, freeConns=1
T36 : getConnection() : activeConns=10, freeConns=0
T36 : start business... : activeConns=10, freeConns=0
T28 : end business... : activeConns=10, freeConns=0
T28 : returnConnection(Connection) : activeConns=9, freeConns=1
T29 : end business... : activeConns=9, freeConns=1
T29 : returnConnection(Connection) : activeConns=8, freeConns=2
T37 : getConnection() : activeConns=9, freeConns=1
T37 : start business... : activeConns=9, freeConns=1
T38 : getConnection() : activeConns=10, freeConns=0
T38 : start business... : activeConns=10, freeConns=0
T39 : end business... : activeConns=10, freeConns=0
T39 : returnConnection(Connection) : activeConns=9, freeConns=1
T40 : getConnection() : activeConns=10, freeConns=0
T40 : start business... : activeConns=10, freeConns=0
T30 : end business... : activeConns=10, freeConns=0
T30 : returnConnection(Connection) : activeConns=9, freeConns=1
T41 : getConnection() : activeConns=10, freeConns=0
T41 : start business... : activeConns=10, freeConns=0
T31 : end business... : activeConns=10, freeConns=0
T31 : returnConnection(Connection) : activeConns=9, freeConns=1
T42 : getConnection() : activeConns=10, freeConns=0
T42 : start business... : activeConns=10, freeConns=0
T32 : end business... : activeConns=10, freeConns=0
T32 : returnConnection(Connection) : activeConns=9, freeConns=1
T43 : getConnection() : activeConns=10, freeConns=0
T43 : start business... : activeConns=10, freeConns=0
T33 : end business... : activeConns=10, freeConns=0
T33 : returnConnection(Connection) : activeConns=9, freeConns=1
T44 : getConnection() : activeConns=10, freeConns=0
T44 : start business... : activeConns=10, freeConns=0
T34 : end business... : activeConns=10, freeConns=0
T34 : returnConnection(Connection) : activeConns=9, freeConns=1
T45 : getConnection() : activeConns=10, freeConns=0
T45 : start business... : activeConns=10, freeConns=0
T35 : end business... : activeConns=10, freeConns=0
T35 : returnConnection(Connection) : activeConns=9, freeConns=1
T36 : end business... : activeConns=9, freeConns=1
T36 : returnConnection(Connection) : activeConns=8, freeConns=2
T46 : getConnection() : activeConns=9, freeConns=1
T46 : start business... : activeConns=9, freeConns=1
T47 : getConnection() : activeConns=10, freeConns=0
T47 : start business... : activeConns=10, freeConns=0
T37 : end business... : activeConns=10, freeConns=0
T37 : returnConnection(Connection) : activeConns=9, freeConns=1
T38 : end business... : activeConns=9, freeConns=1
T38 : returnConnection(Connection) : activeConns=8, freeConns=2
T48 : getConnection() : activeConns=9, freeConns=1
T48 : start business... : activeConns=9, freeConns=1
T49 : getConnection() : activeConns=10, freeConns=0
T40 : end business... : activeConns=10, freeConns=0
T49 : start business... : activeConns=10, freeConns=0
T40 : returnConnection(Connection) : activeConns=9, freeConns=1
T84 : getConnection() : activeConns=10, freeConns=0
T84 : start business... : activeConns=10, freeConns=0
T41 : end business... : activeConns=10, freeConns=0
T41 : returnConnection(Connection) : activeConns=9, freeConns=1
T50 : getConnection() : activeConns=10, freeConns=0
T50 : start business... : activeConns=10, freeConns=0
T42 : end business... : activeConns=10, freeConns=0
T42 : returnConnection(Connection) : activeConns=9, freeConns=1
T51 : getConnection() : activeConns=10, freeConns=0
T51 : start business... : activeConns=10, freeConns=0
T43 : end business... : activeConns=10, freeConns=0
T43 : returnConnection(Connection) : activeConns=9, freeConns=1
T52 : getConnection() : activeConns=10, freeConns=0
T52 : start business... : activeConns=10, freeConns=0
T44 : end business... : activeConns=10, freeConns=0
T44 : returnConnection(Connection) : activeConns=9, freeConns=1
T53 : getConnection() : activeConns=10, freeConns=0
T53 : start business... : activeConns=10, freeConns=0
T45 : end business... : activeConns=10, freeConns=0
T45 : returnConnection(Connection) : activeConns=9, freeConns=1
T54 : getConnection() : activeConns=10, freeConns=0
T54 : start business... : activeConns=10, freeConns=0
T46 : end business... : activeConns=10, freeConns=0
T46 : returnConnection(Connection) : activeConns=9, freeConns=1
T47 : end business... : activeConns=9, freeConns=1
T47 : returnConnection(Connection) : activeConns=8, freeConns=2
T55 : getConnection() : activeConns=9, freeConns=1
T55 : start business... : activeConns=9, freeConns=1
T56 : getConnection() : activeConns=10, freeConns=0
T56 : start business... : activeConns=10, freeConns=0
T48 : end business... : activeConns=10, freeConns=0
T48 : returnConnection(Connection) : activeConns=9, freeConns=1
T57 : getConnection() : activeConns=10, freeConns=0
T57 : start business... : activeConns=10, freeConns=0
T49 : end business... : activeConns=10, freeConns=0
T49 : returnConnection(Connection) : activeConns=9, freeConns=1
T59 : getConnection() : activeConns=10, freeConns=0
T59 : start business... : activeConns=10, freeConns=0
T84 : end business... : activeConns=10, freeConns=0
T84 : returnConnection(Connection) : activeConns=9, freeConns=1
T60 : getConnection() : activeConns=10, freeConns=0
T60 : start business... : activeConns=10, freeConns=0
T50 : end business... : activeConns=10, freeConns=0
T50 : returnConnection(Connection) : activeConns=9, freeConns=1
T61 : getConnection() : activeConns=10, freeConns=0
T61 : start business... : activeConns=10, freeConns=0
T51 : end business... : activeConns=10, freeConns=0
T51 : returnConnection(Connection) : activeConns=9, freeConns=1
T62 : getConnection() : activeConns=10, freeConns=0
T62 : start business... : activeConns=10, freeConns=0
T52 : end business... : activeConns=10, freeConns=0
T52 : returnConnection(Connection) : activeConns=9, freeConns=1
T63 : getConnection() : activeConns=10, freeConns=0
T63 : start business... : activeConns=10, freeConns=0
T53 : end business... : activeConns=10, freeConns=0
T53 : returnConnection(Connection) : activeConns=9, freeConns=1
T64 : getConnection() : activeConns=10, freeConns=0
T64 : start business... : activeConns=10, freeConns=0
T54 : end business... : activeConns=10, freeConns=0
T54 : returnConnection(Connection) : activeConns=9, freeConns=1
T65 : getConnection() : activeConns=10, freeConns=0
T65 : start business... : activeConns=10, freeConns=0
T55 : end business... : activeConns=10, freeConns=0
T55 : returnConnection(Connection) : activeConns=9, freeConns=1
T56 : end business... : activeConns=9, freeConns=1
T56 : returnConnection(Connection) : activeConns=8, freeConns=2
T66 : getConnection() : activeConns=9, freeConns=1
T66 : start business... : activeConns=9, freeConns=1
T67 : getConnection() : activeConns=10, freeConns=0
T67 : start business... : activeConns=10, freeConns=0
T57 : end business... : activeConns=10, freeConns=0
T57 : returnConnection(Connection) : activeConns=9, freeConns=1
T68 : getConnection() : activeConns=10, freeConns=0
T68 : start business... : activeConns=10, freeConns=0
T59 : end business... : activeConns=10, freeConns=0
T59 : returnConnection(Connection) : activeConns=9, freeConns=1
T69 : getConnection() : activeConns=10, freeConns=0
T69 : start business... : activeConns=10, freeConns=0
T60 : end business... : activeConns=10, freeConns=0
T60 : returnConnection(Connection) : activeConns=9, freeConns=1
T70 : getConnection() : activeConns=10, freeConns=0
T70 : start business... : activeConns=10, freeConns=0
T61 : end business... : activeConns=10, freeConns=0
T61 : returnConnection(Connection) : activeConns=9, freeConns=1
T71 : getConnection() : activeConns=10, freeConns=0
T71 : start business... : activeConns=10, freeConns=0
T62 : end business... : activeConns=10, freeConns=0
T62 : returnConnection(Connection) : activeConns=9, freeConns=1
T72 : getConnection() : activeConns=10, freeConns=0
T72 : start business... : activeConns=10, freeConns=0
T63 : end business... : activeConns=10, freeConns=0
T63 : returnConnection(Connection) : activeConns=9, freeConns=1
T73 : getConnection() : activeConns=10, freeConns=0
T73 : start business... : activeConns=10, freeConns=0
T64 : end business... : activeConns=10, freeConns=0
T64 : returnConnection(Connection) : activeConns=9, freeConns=1
T74 : getConnection() : activeConns=10, freeConns=0
T74 : start business... : activeConns=10, freeConns=0
T65 : end business... : activeConns=10, freeConns=0
T65 : returnConnection(Connection) : activeConns=9, freeConns=1
T58 : getConnection() : activeConns=10, freeConns=0
T58 : start business... : activeConns=10, freeConns=0
T66 : end business... : activeConns=10, freeConns=0
T66 : returnConnection(Connection) : activeConns=9, freeConns=1
T67 : end business... : activeConns=9, freeConns=1
T67 : returnConnection(Connection) : activeConns=8, freeConns=2
T100 : getConnection() : activeConns=9, freeConns=1
T100 : start business... : activeConns=9, freeConns=1
T99 : getConnection() : activeConns=10, freeConns=0
T99 : start business... : activeConns=10, freeConns=0
T68 : end business... : activeConns=10, freeConns=0
T68 : returnConnection(Connection) : activeConns=9, freeConns=1
T98 : getConnection() : activeConns=10, freeConns=0
T98 : start business... : activeConns=10, freeConns=0
T69 : end business... : activeConns=10, freeConns=0
T69 : returnConnection(Connection) : activeConns=9, freeConns=1
T97 : getConnection() : activeConns=10, freeConns=0
T97 : start business... : activeConns=10, freeConns=0
T70 : end business... : activeConns=10, freeConns=0
T70 : returnConnection(Connection) : activeConns=9, freeConns=1
T96 : getConnection() : activeConns=10, freeConns=0
T96 : start business... : activeConns=10, freeConns=0
T71 : end business... : activeConns=10, freeConns=0
T71 : returnConnection(Connection) : activeConns=9, freeConns=1
T95 : getConnection() : activeConns=10, freeConns=0
T95 : start business... : activeConns=10, freeConns=0
T72 : end business... : activeConns=10, freeConns=0
T72 : returnConnection(Connection) : activeConns=9, freeConns=1
T94 : getConnection() : activeConns=10, freeConns=0
T94 : start business... : activeConns=10, freeConns=0
T73 : end business... : activeConns=10, freeConns=0
T73 : returnConnection(Connection) : activeConns=9, freeConns=1
T93 : getConnection() : activeConns=10, freeConns=0
T93 : start business... : activeConns=10, freeConns=0
T74 : end business... : activeConns=10, freeConns=0
T74 : returnConnection(Connection) : activeConns=9, freeConns=1
T92 : getConnection() : activeConns=10, freeConns=0
T92 : start business... : activeConns=10, freeConns=0
T58 : end business... : activeConns=10, freeConns=0
T58 : returnConnection(Connection) : activeConns=9, freeConns=1
T91 : getConnection() : activeConns=10, freeConns=0
T91 : start business... : activeConns=10, freeConns=0
T100 : end business... : activeConns=10, freeConns=0
T100 : returnConnection(Connection) : activeConns=9, freeConns=1
T99 : end business... : activeConns=9, freeConns=1
T99 : returnConnection(Connection) : activeConns=8, freeConns=2
T90 : getConnection() : activeConns=9, freeConns=1
T90 : start business... : activeConns=9, freeConns=1
T89 : getConnection() : activeConns=10, freeConns=0
T89 : start business... : activeConns=10, freeConns=0
T98 : end business... : activeConns=10, freeConns=0
T98 : returnConnection(Connection) : activeConns=9, freeConns=1
T88 : getConnection() : activeConns=10, freeConns=0
T88 : start business... : activeConns=10, freeConns=0
T97 : end business... : activeConns=10, freeConns=0
T97 : returnConnection(Connection) : activeConns=9, freeConns=1
T87 : getConnection() : activeConns=10, freeConns=0
T87 : start business... : activeConns=10, freeConns=0
T96 : end business... : activeConns=10, freeConns=0
T96 : returnConnection(Connection) : activeConns=9, freeConns=1
T86 : getConnection() : activeConns=10, freeConns=0
T86 : start business... : activeConns=10, freeConns=0
T95 : end business... : activeConns=10, freeConns=0
T95 : returnConnection(Connection) : activeConns=9, freeConns=1
T85 : getConnection() : activeConns=10, freeConns=0
T85 : start business... : activeConns=10, freeConns=0
T94 : end business... : activeConns=10, freeConns=0
T94 : returnConnection(Connection) : activeConns=9, freeConns=1
T93 : end business... : activeConns=9, freeConns=1
T93 : returnConnection(Connection) : activeConns=8, freeConns=2
T83 : getConnection() : activeConns=9, freeConns=1
T83 : start business... : activeConns=9, freeConns=1
T82 : getConnection() : activeConns=10, freeConns=0
T82 : start business... : activeConns=10, freeConns=0
T92 : end business... : activeConns=10, freeConns=0
T92 : returnConnection(Connection) : activeConns=9, freeConns=1
T81 : getConnection() : activeConns=10, freeConns=0
T81 : start business... : activeConns=10, freeConns=0
T91 : end business... : activeConns=10, freeConns=0
T91 : returnConnection(Connection) : activeConns=9, freeConns=1
T80 : getConnection() : activeConns=10, freeConns=0
T80 : start business... : activeConns=10, freeConns=0
T90 : end business... : activeConns=10, freeConns=0
T90 : returnConnection(Connection) : activeConns=9, freeConns=1
T89 : end business... : activeConns=9, freeConns=1
T79 : getConnection() : activeConns=10, freeConns=0
T79 : start business... : activeConns=10, freeConns=0
T89 : returnConnection(Connection) : activeConns=9, freeConns=1
T78 : getConnection() : activeConns=10, freeConns=0
T78 : start business... : activeConns=10, freeConns=0
T88 : end business... : activeConns=10, freeConns=0
T88 : returnConnection(Connection) : activeConns=9, freeConns=1
T77 : getConnection() : activeConns=10, freeConns=0
T77 : start business... : activeConns=10, freeConns=0
T87 : end business... : activeConns=10, freeConns=0
T87 : returnConnection(Connection) : activeConns=9, freeConns=1
T76 : getConnection() : activeConns=10, freeConns=0
T76 : start business... : activeConns=10, freeConns=0
T86 : end business... : activeConns=10, freeConns=0
T86 : returnConnection(Connection) : activeConns=9, freeConns=1
T75 : getConnection() : activeConns=10, freeConns=0
T75 : start business... : activeConns=10, freeConns=0
T85 : end business... : activeConns=10, freeConns=0
T85 : returnConnection(Connection) : activeConns=9, freeConns=1
T83 : end business... : activeConns=9, freeConns=1
T83 : returnConnection(Connection) : activeConns=8, freeConns=2
T82 : end business... : activeConns=8, freeConns=2
T82 : returnConnection(Connection) : activeConns=7, freeConns=3
T81 : end business... : activeConns=7, freeConns=3
T81 : returnConnection(Connection) : activeConns=6, freeConns=4
T80 : end business... : activeConns=6, freeConns=4
T80 : returnConnection(Connection) : activeConns=5, freeConns=5
T79 : end business... : activeConns=5, freeConns=5
T79 : returnConnection(Connection) : activeConns=4, freeConns=6
T78 : end business... : activeConns=4, freeConns=6
T78 : returnConnection(Connection) : activeConns=3, freeConns=7
T77 : end business... : activeConns=3, freeConns=7
T77 : returnConnection(Connection) : activeConns=2, freeConns=8
T76 : end business... : activeConns=2, freeConns=8
T76 : returnConnection(Connection) : activeConns=1, freeConns=9
T75 : end business... : activeConns=1, freeConns=9
T75 : returnConnection(Connection) : activeConns=0, freeConns=10


分享到:
评论

相关推荐

    数据库连接池代码实现

    在本文中,我们将探讨如何实现一个简单的数据库连接池。首先,我们需要理解几个关键概念: 1. **连接池初始化**:在程序启动时,连接池会根据配置预先创建一定数量的数据库连接。这些连接在空闲时会被保存起来,...

    03-数据库连接池驱动_数据库连接池;驱动_

    其次,Druid是阿里巴巴开源的数据库连接池实现,它不仅是一个连接池,还集成了监控、SQL解析、WebStatFilter等特性。Druid以其强大的监控能力、优秀的性能和全面的功能深受开发者喜爱。它提供了实时的监控界面,可以...

    数据库连接池java代码实现

    本文将深入探讨如何使用Java代码来实现一个简单的数据库连接池,并解释其核心概念和工作原理。 连接池的基本思想是维护一组预初始化的数据库连接,当应用程序需要时,可以从池中获取一个连接,使用完毕后,再归还回...

    数据库连接池的实现(java版本)

    通过以上分析可以看出,本文介绍的Java版数据库连接池实现相对简单,但涵盖了连接池的基本功能,包括连接的创建、管理、回收等。实际应用中,可能还需要考虑更多细节,例如连接超时处理、连接异常处理、线程安全等。...

    数据库连接池的一个简单实现

    本篇文章将详细解析一个简单的Java实现数据库连接池的过程。 首先,我们要理解数据库连接池的基本原理。数据库连接池预先创建并维护一定数量的数据库连接,当应用程序需要访问数据库时,可以从池中获取一个已存在的...

    JAVA数据库连接池

    本教程将深入探讨数据库连接池的原理,特别是针对C3P0和DBCP这两个常见的连接池实现。 首先,我们来看一下数据库连接池的基本概念。数据库连接池在初始化时会创建一定数量的数据库连接并保存在池中,当应用程序需要...

    C# 数据库连接池

    在C#中,ADO.NET框架内置了对数据库连接池的支持,主要通过`System.Data.SqlClient.SqlConnection`类实现。当我们使用`SqlConnection`的`Open()`方法打开连接时,实际上是从连接池中获取一个可用的连接;调用`Close...

    java数据库连接池

    以下代码片段展示了如何在Java中实现一个简单的数据库连接池: ```java public class BaseDao { private String dbUrl = ""; // 数据库URL private String jdbcDriver = ""; // JDBC驱动 private String ...

    代理模式之静态代理---数据库连接池对象实现原理

    在本主题“代理模式之静态代理---数据库连接池对象实现原理”中,我们将探讨如何使用静态代理来实现数据库连接池。数据库连接池是现代应用中常用的优化手段,它可以高效地管理数据库连接,避免频繁地创建和关闭连接...

    数据库连接池代码完整版

    数据库连接池的实现可以分为两步:定义数据库访问接口和实现该接口。 1. 定义数据库访问接口 定义一个数据库访问接口,包括创建连接和关闭连接两个方法: ```java public interface IDatabaseConnection{ public...

    数据库连接池c3p0jar包

    数据库连接池是Java开发中非常重要的一个组件,它在处理多线程环境下对数据库资源的高效利用和管理中起着关键作用。C3P0是一个开源的Java连接池实现,它提供了一种灵活且功能强大的数据库连接管理方式。在本文中,...

    强烈推荐一个简单而实用的数据库连接池工程

    本文推荐的“简单而实用的数据库连接池工程”可能是指Druid,因为Druid是一个非常受欢迎的开源连接池实现,由阿里巴巴开源社区提供,以其高效、稳定和丰富的监控特性受到开发者喜爱。 Druid的使用主要包括以下步骤...

    几种数据库连接池详细配置

    通过以上对Apache DBCP和C3P0的配置参数的详细解析,我们可以看到,虽然这两种数据库连接池的实现方式不同,但它们都提供了丰富的配置项来满足不同的应用场景需求。合理设置这些参数,可以有效提升系统的性能和稳定...

    手动设计自定义数据库连接池

    这时候,就需要手动设计并实现一个自定义的数据库连接池。实现自定义连接池的关键步骤如下: 1. **初始化连接池**:定义连接池的最大连接数、初始连接数等参数,并根据这些参数创建初始的连接。 2. **提供获取连接...

    java写的数据库连接池

    本文将深入探讨数据库连接池的工作原理、重要性以及如何在Java中实现一个简单的连接池。 首先,数据库连接池是管理数据库连接的一种机制,它允许应用程序重复使用已建立的数据库连接,而不是每次需要时都创建新的...

    delphiADO数据库连接池

    Delphi,作为一款强大的Windows应用程序开发工具,提供了多种方式来实现数据库连接池。本文将深入探讨Delphi ADO(ActiveX Data Objects)数据库连接池的实现,以及如何通过提供的`uAdoConnPool.pas`源代码和`使用...

    补充 数据库连接池.ppt

    DBUtils可以与任何实现了DataSource接口的数据库连接池配合使用,提供更便捷的数据库操作体验。 总结来说,数据库连接池是现代数据库驱动的Web应用程序中不可或缺的一部分,它通过有效的管理数据库连接,提高了系统...

    各种数据库连接池

    标题中提到的"各种数据库连接池",包括了c3p、DBCP和Proxool,这些都是Java环境下常见的数据库连接池实现: 1. **C3P0**:这是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。...

Global site tag (gtag.js) - Google Analytics