1. 程式人生 > >java連線池技術

java連線池技術

連線池運作原理:

  在實際應用開發中,特別是在WEB應用系統中,如果JSP、Servlet或EJB使用JDBC直接訪問資料庫中的資料,每一次資料訪問請求都必須經歷建立資料庫連線、開啟資料庫、存取資料和關閉資料庫連線等步驟,而連線並開啟資料庫是一件既消耗資源又費時的工作,如果頻繁發生這種資料庫操作,系統的效能必然會急劇下降,甚至會導致系統崩潰。資料庫連線池技術是解決這個問題最常用的方法,在許多應用程式伺服器(例如:Weblogic, WebSphere,JBoss)中,基本都提供了這項技術,無需自己程式設計,但是,深入瞭解這項技術是非常必要的。

如果有對Java感興趣程式設計師,可來我們的Java交流扣qun哦:854818273裡面免費送Java的系統教程噢! 小編也是一名從事了8年的高階架構師,花了近兩個月整理了一份較適合當下學習的乾貨,以及我這8年的工作經驗,分享給每一位想學Java的小夥伴,這裡是Java學習者聚集地,歡迎進階中的小夥伴。

 

資料庫連線池技術的思想非常簡單,將資料庫連線作為物件儲存在一個Vector物件中,一旦資料庫連線建立後,不同的資料庫訪問請求就可以共享這些連線,這樣,通過複用這些已經建立的資料庫連線,可以克服上述缺點,極大地節省系統資源和時間。

  資料庫連線池的主要操作如下:

  (1)建立資料庫連線池物件(伺服器啟動)。

  (2)按照事先指定的引數建立初始數量的資料庫連線(即:空閒連線數)。

  (3)對於一個數據庫訪問請求,直接從連線池中得到一個連線。如果資料庫連線池物件中沒有空閒的連線,且連線數沒有達到最大(即:最大活躍連線數),建立一個新的資料庫連線。

  (4)存取資料庫。

  (5)關閉資料庫,釋放所有資料庫連線(此時的關閉資料庫連線,並非真正關閉,而是將其放入空閒佇列中。如實際空閒連線數大於初始空閒連線數則釋放連線)。

  (6)釋放資料庫連線池物件(伺服器停止、維護期間,釋放資料庫連線池物件,並釋放所有連線)。

1.先把連線oracle的驅動放到tomcat5.5/common/lib目錄中,,這樣他就可以自動找到驅動.
*****javaee裡面的四個引用包都要拷到 webroot裡面的web-inf裡面的lib檔案下

2.在tomcat5.5目錄下找到conf目錄下找到server.xml檔案
在這個檔案中 找到context標籤,在標籤context中加入以下標籤
<!--未打包好的原始碼路徑docBase,打包好即:docBase="FileUpload.war"-->
****測試時不能用war,否則後果很嚴重
<Context path="/FileUpload" docBase="D:/workspace/FileUpload/WebRoot">
  <Resource
      name="jdbc/oracle"
      type="javax.sql.DataSource"
      driverClassName="oracle.jdbc.driver.OracleDriver"
      password="hpp"
      maxIdle="30"
      maxActive="100"
      maxWait="5000"
      username="hpp"
      url="jdbc:oracle:thin:

@127.0.0.1:1521:orcl"/>
</Context>

 

3.引數說明
  Tomcat連線池中,部分引數說明如下:

    name:為這個連線池指定一個名字
    type:資料來源型別, 一般不需要動
    driverClassName:驅動名字,一般也不需要動
    password 和username都不用說吧

  maxActive="100"  < !--最大活躍連線數,這裡取值為100,表示同時最多有100個數據庫連線。設為0表示無限制。-->
  maxIdle="30"       < !--最大的空閒連線數,這裡取值為30,表示即使沒有資料庫連線時依然可以保持30個空閒的連線,而不被清除,隨時處於待命狀態。設為0表示無限制。-->
  maxWait="10000"    < !--最大建立連線等待時間。如果超過此時間將接到異常。這裡設定為10000,表示10秒後超時。設為-1表示無限制,直到超時為止。-->

    PS:如果最大資料庫活躍連線數過大,可想而知,記憶體佔用量是非常驚人的!如果空閒連線數過大,則資源利用率低,連線池長期未釋放,可導致連線池結點異常。所以選好maxActive和maxIdle是連線池效能的關鍵因素,當然這取決於伺服器環境。

 

 

JDBC獲取Connection的方法也要改變

 private final String driver="oracle.jdbc.driver.OracleDriver";
 private final String url="jdbc:oracle:thin:@localhost:1521:orcl";
 private final String user="hfq";
 private final String pwd="hfq";
 Connection conn=null;
// public TJDBC(){
//  try {
//   Class.forName(driver);
//   try {
//    conn=DriverManager.getConnection(url,user,pwd);
//    conn.setAutoCommit(false);//設定自動提交
//   } catch (SQLException e) {
//    // TODO Auto-generated catch block
//    e.printStackTrace();
//   }
//  } catch (ClassNotFoundException e) {
//   // TODO Auto-generated catch block
//   e.printStackTrace();
//  }
//  
// }
 
 public TJDBC(){
  try {
   Context context = new InitialContext();
   DataSource ds = (DataSource)context.lookup("java:comp/env/jdbc/oracle");// jdbc/oracl名稱
   conn = ds.getConnection();
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 
 }