首页 > 其他 > 详细

标准连接池实现

时间:2014-03-26 07:17:21      阅读:530      评论:0      收藏:0      [点我收藏+]

步骤:1.实现dataSource接口

2.声明一个集合类用于管理多个连接

3.必须要拥有一种能能力,回收连接

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
/**
 * 标准的连接
 */
public class DBPool implements DataSource {
    //声明一个池管理对象
    private LinkedList<Connection> pool = new LinkedList<Connection>();
    //在初始化这个DataSourc的子类时在构造方法设置多个连接
    public DBPool(){
        try{
            Class.forName("com.mysql.jdbc.Driver");
            String url = "jdbc:mysql:///db?characterEncoding=UTf8";
            for(int i=0;i<3;i++){
                final Connection con = DriverManager.getConnection(url,"root","123");
                Object proxyedConn =
                        Proxy.newProxyInstance(DBPool.class.getClassLoader(),
                                new Class[]{Connection.class},
                                new InvocationHandler() {
                                    public Object invoke(Object proxyedConnection, Method method, Object[] args)
                                            throws Throwable {
                                        if(method.getName().equals("close")){
                                            synchronized (pool) {
                                                pool.addLast((Connection) proxyedConnection);
                                                pool.notify();
                                            }
                                            return  null;
                                        }
                                        //目标方法的返回值
                                        Object returnValue=method.invoke(con, args);
                                        return returnValue;
                                    }
                                });
                pool.add((Connection) proxyedConn);
            }
        }catch(Exception e){
            throw new RuntimeException(e.getMessage(),e);
        }
    }
    public Connection getConnection() throws SQLException {
        synchronized (pool) {
            if(pool.size()==0){
                try {
                    pool.wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                return getConnection();
            }
            Connection con = pool.removeFirst();
            System.err.println("siize:"+pool.size());
            return con;
        }
    }
     
 
     
     
     
     
     
    public PrintWriter getLogWriter() throws SQLException {
        // TODO Auto-generated method stub
        return null;
    }
 
    public void setLogWriter(PrintWriter out) throws SQLException {
        // TODO Auto-generated method stub
         
    }
 
    public void setLoginTimeout(int seconds) throws SQLException {
        // TODO Auto-generated method stub
         
    }
 
    public int getLoginTimeout() throws SQLException {
        // TODO Auto-generated method stub
        return 0;
    }
 
    public <T> T unwrap(Class<T> iface) throws SQLException {
        // TODO Auto-generated method stub
        return null;
    }
 
    public boolean isWrapperFor(Class<?> iface) throws SQLException {
        // TODO Auto-generated method stub
        return false;
    }
    public Connection getConnection(String username, String password)
            throws SQLException {
        // TODO Auto-generated method stub
        return null;
    }
     
}

用包装模式实现数据库连接池

我这里只写部分代码,对close()方法增强

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
public class MyDataSource implements DataSource {
    private LinkedList<Connection> pool = new LinkedList<Connection>();
    public MyDataSource() {
        try {
            Class.forName("com.mysql.jdbc.Driver");
            String url = "jdbc:mysql:///db?characterEncoding=UTf8";
            for (int i = 0; i < 3; i++) {
                //创建原生的连接,// com.mysql.jdbc.JDBC4Connection@8888
                Connection con = DriverManager.getConnection(url, "root",
                        "123");
                //声明包装类
                MyConn conn = new MyConn(con);
                pool.add(conn);//将包装类添加到池中去
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    //此方法来自于datasource,用于返回一个连接
    public Connection getConnection() throws SQLException {
        synchronized (pool) {
            if (pool.size() == 0) {
                try {
                    pool.wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                return getConnection();
            }
            Connection con = pool.removeFirst();
            System.err.println("siize:" + pool.size());
            return con;
        }
    }
 
    // 以下包装connection
    class MyConn implements Connection {
        // 声明被包装类的成员
        private Connection conn;
 
        // 通过构造接收MySql的connection的对象JDBC4Connection@8888
        public MyConn(Connection con) {
            this.conn = con;
        }
        //关闭连接
        public void close() throws SQLException {
            synchronized (pool) {
                //有人调用了关闭方法,不能关
                System.err.println("有人还连接了。。。。"+this);
                pool.add(this);
                pool.notify();
            }
        }

下午根据刀哥的指点,暂时把c3p0放到了一边,自己开始思考怎样去做小项目练手,光学理论也不行,只有在实战中才能更好地理解它们

 工作室系统开发流程

  1. 首页开发

bubuko.com,布布扣

2.登录可以进入自己的相关页面,自己有相册,日志的管理,如果是管理员则可以对系统进行管理,分别是管理员界面,与用户界面

管理员界面

bubuko.com,布布扣

用户界面

如果非内部成员点击没有的菜单,则没有相应的功能

bubuko.com,布布扣

接下来是数据库的设计

创建用户表,博客(日志)表,菜单表,项目表,考勤记录表,系统通知表, 菜单用户关联表

ps: 由于下午上选修课,再加上 班上的事情,数据库建表,表字段,表关系的设计,等事情只能明天继续.感觉一天好忙哦~~~~

 

标准连接池实现,布布扣,bubuko.com

标准连接池实现

原文:http://www.cnblogs.com/ylfeiu/p/3624074.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!