欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

数据库连接池的简单实现

程序员文章站 2022-03-25 23:07:44
...

这是我以前写的一段程序,试图按着自己对多线程与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