package 动态连接数据库;import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.LinkedList;public class UtilsDB {
public static void main(String[] args) {
UtilsDB u = new UtilsDB();
System.err.println(u.getCon());}
private static LinkedList<Connection> pool = new LinkedList<Connection>();
static {
try {Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql:///abc";for (int i = 0; i < 3; i++) {
// 真实对象
final Connection con = DriverManager.getConnection(url, "root",
"1234");
// 声明代理Object obj = Proxy.newProxyInstance(
UtilsDB.class.getClassLoader(),
new Class[] { Connection.class },new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method,
Object[] args) throws Throwable {if (method.getName().equals("close")) {
System.err.println("有人还连接");
synchronized (pool) {
pool.addLast((Connection) proxy);
pool.notifyAll();
return null;}
} else {
return method.invoke(con, args);}
}
});// 将代理人添加到pool
pool.add((Connection) obj);
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public static Connection getCon() {
synchronized (pool) {
if (pool.size() == 0) {
try {
pool.wait();} catch (Exception e) {
throw new RuntimeException(e.getMessage());
}
return getCon();
} else {Connection con = pool.removeFirst();
System.err.println("pool.size:" + pool.size());
return con;}
}
}
}
package 动态连接数据库;import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;public class TestDb {
public static void main(String[] args) {
//Connection con=UtilsDB.getCon();
//System.err.println(con);for (int i = 0; i < 110; i++) {
new Thread() {
public void run() {Connection con = UtilsDB.getCon();
try {
Statement st = con.createStatement();System.err.println(con + "\t" + this.getName() + "\t"
+ st);} catch (SQLException e) {
e.printStackTrace();} finally {
try {
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}}
};}.start();
}
}
}
动态代理连接数据库,码迷,mamicode.com