首页 > 代码库 > 代理写标准连接池
代理写标准连接池
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 }
代理写标准连接池
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。