1. 程式人生 > >13.數據庫連接池

13.數據庫連接池

默認 quick 選擇 變量 修改 bcp inf 包裝 一次

/*使用數據庫連接池優化程序性能*/

一次性從數據庫中拿出一定數量的連接,放到一個池子中,每次程序要拿連接的時候,從這個池子裏面去拿,用完了,也是放到這個池子裏,

避免頻繁的從數據庫中去存取連接

編寫自己的數據庫連接池

  1.實現DataSource接口 ,DataSource接口中定義了兩個重載的getConnection() 方法

  2.在DataSource構造函數中批量創建與數據庫的連接,並把創建的連接加入LinkedList對象中

   實現getConnection()方法,讓getConnection()方法每次調用時,從LinkedList中取一個connection (remove方法) 返回給用戶

  3.當用戶使用完connection,調用connection.close() 方法時,connection對象應保證自己返回到LinkedList中,而不要把connection 還給數據庫

  針對 “返回到LinkedList中,而不要把connection 還給數據庫” 這種需要增強某個方法,有三種方式實現

    1.編寫一個子類(繼承Connection) 覆蓋close方法 (這裏不可以,因為父類的其他信息,子類並不擁有)

    2.寫一個Connection包裝類,增強close方法 (包裝設計模式)

    3.用動態代理,返回一個代理對象出去,攔截close方法的調用,對close方法進行增強

    (不是clsoe方法,都調用invoke方法(讓其調用connection自身的方法),是close方法的話,手動增強)


/*用包裝設計模式對某個對象進行增強*/

  1.寫一個類,實現與被增強對象(mysql的connection)接口

  2.定義一個變量,指向被增強對象

  3.定義一個構造方法,接收被增強對象

  4.覆蓋想增強的方法

  5.對於不想增強的方法,直接調用被增強對象的方法


/*加入dbcp鏈接池*/

  1.導入jar包

  2.在類目錄下加入dbcp的配置文件

  3.在jdbcUtils靜態代碼塊中創建池


/*C3P0數據庫連接池*/

  1.導入jar包

  2.新建c3p0Test.java單元測試類

  3.打開c3p0的doc幫助文檔

  4.選擇QuickStart快速開始

  5.拷貝裏邊的實例代碼

  6.修改各個參數

采用配置文件配置數據源

  1.打開幫助文檔

  2.找到XML文件示例

  3.在工程中新建c3p0-config.xml文件

  4.拷貝XML示例文件,修改參數 ( <property></property> )

  private static ComboPooledDataSource ds = null;
  static {

    try {

      ds = new ComboPooledDataSource("...");(如果括號為空,沒有指定的話,則采用默認)

    }

  }

/*配置Tomcat數據源(實際上是DBCP)*/

  1.在Tomcat中加入數據庫驅動軟件(放在web工程中的lib 中沒有用,需要放在Tomcat的lib目錄下)

  2.配置context(可以在很多地方,可以修改tomcat的service.xml文件,也可以在web工程中)

  META-INF目錄下,新建一個XML文件,拷貝Tomcat幫助文檔中的示例代碼

  3.使用JNDI獲取連接對象

  Context initCtx = new InitialContext(); //初始化JNDI

  Context envCtx = (Context) initCtx.lookup("java:comp/env"); //得到JNDI容器

  DataSource ds = (DataSource) envCtx.lookup("jdbc/EmployeeDB"); //從容器中檢索連接池

  Connection conn = ds.getConnection();

13.數據庫連接池