首页 > 代码库 > 代理写标准连接池

代理写标准连接池

 1 //实现DataSource接口 2 public class MyConn implements DataSource { 3     //声明池管理对象 4     private LinkedList<Connection> pool =new LinkedList<Connection>(); 5     //在构造函数中初始化,创建多个连接 6     public MyConn() 7     { 8         try { 9             Class.forName("com.mysql.jdbc.Driver");10             String url="jdbc:mysql://localhost:3306/jdbcdb";11             for(int i=0;i<3;i++)12             {13                 final Connection conn =DriverManager.getConnection(url,"root","mysql");14                 15                 Object ProxyedConn=    Proxy.newProxyInstance(16                         MyConn.class.getClassLoader(), //类加载器17                         new Class[]{Connection.class}, //被代理类的父接口18                         new InvocationHandler() {    //句柄,获取代理类的方法                        19                             public Object invoke(Object proxyedConnection, Method method, Object[] args)20                                     throws Throwable {21                                     22                                     if(method.getName().equals("close"))23                                     {24                                         synchronized (pool) {25                                             pool.addLast((Connection)proxyedConnection);26                                             pool.notify();27                                         }28                                         return null;29                                     }30                                     //目标方法的返回值31                                 Object returnValue=http://www.mamicode.com/method.invoke(conn, args);//conn,你要代理的对象32                                 return returnValue;                                33                             }34                         });35                 36                 pool.add((Connection)ProxyedConn);37             }38         } catch (Exception e) {39             e.printStackTrace();40         }        41     }    42     43     public Connection getConnection() throws SQLException {44 45         synchronized (pool) {46             if(pool.size()==0)//池中是否还有连接,如果没有等待47             {48                 try {49                     pool.wait();50                 } catch (InterruptedException e) {51                     e.printStackTrace();52                 }53                 return getConnection();//递归54             }55             56             Connection conn= pool.removeFirst();//移除第一个57             return conn;58         }59 60     }

代理写标准连接池