`

数据库连接池的简单实现

阅读更多

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


分享到:
评论

相关推荐

    实现jdbc数据库连接池

    此类非常简单,免去了网上众多资料里所说的麻烦的tomcat配置,更强的是它可以通用!不仅oracle,mysql,sqlserver2000都行,因为它依据的是你自己连接数据库的驱动。当然首先你要保证你拥有一个能连接自己数据库的对应...

    数据库连接池及其管理

    用java实现的简易的数据库连接池及其管理 课程设计 编写一关于Microsoft Access数据库连接池及其管理的相关类,要求能从XML配置文件中读取该数据库驱动程序,数据库名,连接池最大连接数,最多等待用户数,查询...

    JDBC数据库连接池的简单实现.rar

    JDBC数据库连接池的简单实现.rar

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

    数据库连接池的一个简单实现 Java版源代码

    简易的数据库连接池实现

    自定义实现的数据库连接池,并进行加锁,保证线程安全,适合初学者学习。

    自己写的java数据库连接池

    数据库连接池用在网站后台架构中,非常有利于提高用户请求的响应速度。为此,我编写了一个功能简单,但非常强大的。经过上千个多线程同时访问的数据库连接池程序 。 资源包括一个接口,两个实现。一个测试类。 ...

    java数据库连接池

    java数据库连接池,是一个简单实现数据库连接池的类

    Druid数据库连接池+Spring JDBC+BeanUtils简单实现登录功能

    JavaWeb Druid数据库连接池+Spring JDBC+BeanUtils简单实现登录功能,博客地址:https://blog.csdn.net/qq_44515800/article/details/121856426

    一种简单JDBC数据库连接池的实现.rar_connection pool jdbc_site:www.pudn.com_数据库

    在java中使用一种简单JDBC数据库连接池的实现

    Java实现数据库连接池简易教程

    主要为大家介绍了Java实现数据库连接池简易教程,感兴趣的小伙伴们可以参考一下

    基于数据库连接池的D A O模式在J 2 E E应用系统中的实现

    本文采用J2EE技术设计了物流企业电子商务的在线购物和配送管理系统,文中简单介绍了该系统的逻 辑结构、功能结构和数据流程 ,详细描述 了在线购物模块中的数据库连接池及 DAO 的实现方法 并给 出了核心流程代 码。

    R2,jdbc数据库连接池源码

    R2通过代理connection对象和工厂模式实现了不改变原jdbc调用方式的前提下的jdbc数据库连接池。结构简单,功能完善,高可配置,充分应用了jdk1.6的同步包特性,提高了并发效率,并能够完美应用于非web项目和web项目,...

    对象池&线程池&数据库连接池

    最简单高效的JAVA对象池、线程池、以及使用对象池技术实现的数据库连接池 已在生产运行5年以上的代码 若有任何问题请与我联系

    Java建立数据库连接池

    把该模式应用到数据库连接管理领域,是建立一个数据库连接池,提供一套高效的连接分配、使用策略,终目标是实现连接的高效、安全的复用。  数据库连接池的基本原理是在内部对象池中维护一定数量的数据库连接,并...

    数据库连接池封装【Java源码】

    这个类就是利用了DBCP包写数据库连接池。 4.ISqlHelper.java 其实这个接口也很简单,定义了那么几个方法,说白了就是操作数据库的,为什么要写成泛型的接口,为了就是后面大家的业务有针对性,一个实体一个业务...

    学习数据库连接池的好代码

    对数据库连接池一直认为是个很神秘的东西,但是看完这个代码后,就能明白,原来连接池的实现是这样简单

    基于JDBC的数据库连接池的煤矿安全监控技术体系建设

    文章简单介绍了JDBC数据库连接原理和数据库连接池工作原理,结合其原理和Java应用系统存在的问题,提出基于JDBC的数据库连接池实现连接及语句分享的实现方案,其目的是在连接数不断增加的情况下,提高应用系统对用户请求...

    java数据库连接池实现

    简单的java连接池代码,很实用不错的例子。

    连接池原来这么简单

    上述伪代码忽略了一些细节,在实现连接池中是需要考虑的: (1)如果连接全部被占用,是返回失败,还是让上游等待 (2)需要实施连接可用性检测 (3)为了让调用方更友好,可能还需要包装一层DAO层,让“连接”这个...

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

    下载程序和配置文件范例 博文链接:https://inotgaoshou.iteye.com/blog/860454

Global site tag (gtag.js) - Google Analytics