国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

java學習筆記—標準連接池的實現(27)

2019-11-14 23:40:08
字體:
來源:轉載
供稿:網友
java學習筆記—標準連接池的實現(27)

javax.sql.DataSource.

Java.sql.*

DataSource 接口由驅動程序供應商實現。共有三種類型的實現:

  1. 基本實現 - 生成標準的 Connection 對象 – 一個DataSource數據源中,只有一個Connection ,這個不是池管理。
  2. 連接池實現 [W1]- 生成自動參與連接池的 Connection 對象。
  3. 分布式事務實現 - 生成一個 Connection 對象,該對象可用于分布式事務,大多數情況下總是參與連接池。JTA.jar – SUN。

標準的連接池,要求:

1:實現dataSource接口。

2:聲明一個集合類用于管理多個連接。

3:必須要擁有一種能力,回收連接。

4:必須要實現一個方法,getConnection以獲取一個連接。

5:實現DataSource接口的類,一般不能擁有static池對象。List.

6:在一個程序中,要求只擁有一個DataSource實例就可以了。

以下是具體的實現:


import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;import java.util.LinkedList;import javax.sql.DataSource;/** * 標準的連接 */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:///db909?characterEncoding=UTf8";            for(int i=0;i<3;i++){                Connection con = DriverManager.getConnection(url,"root","1234");                //將生成的這個連接。放到pool                pool.add(con);            }        }catch(Exception e){            throw new RuntimeException(e.getMessage(),e);        }    }    public Connection getConnection() throws SQLException {        return pool.removeFirst();    }    ///其他的方法。不實現}

2:實現連接的回收

package cn.itcast.utils;import java.io.PrintWriter;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.sql.SQLException;import java.util.LinkedList;import javax.sql.DataSource;/** * 標準的連接 */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:///db909?characterEncoding=UTf8";            for(int i=0;i<3;i++){                final Connection con = DriverManager.getConnection(url,"root","1234");                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;        }    }}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 武冈市| 聂荣县| 贵定县| 康保县| 周口市| 定边县| 屯门区| 和静县| 平阳县| 云安县| 运城市| 修文县| 历史| 淅川县| 巩留县| 轮台县| 黔西| 阿巴嘎旗| 荣成市| 铅山县| 平阳县| 新河县| 富源县| 马关县| 察隅县| 衡阳县| 大庆市| 扶沟县| 聂拉木县| 黑河市| 聊城市| 苍溪县| 中超| 育儿| 鹤岗市| 南和县| 新蔡县| 万源市| 泽普县| 电白县| 乌恰县|