Java-自訂簡單的mysql資料庫連接池

來源:互聯網
上載者:User

標籤:drive   關閉   pack   private   .sql   catch   remove   source   hibernate   

    當我們在使用java串連資料庫的時候,要註冊驅動,.再通過"驅動管理器"擷取連線物件(Connection),當我們的程式被很多使用者訪問的時候,每次都建立一個Connection串連對 象的時候,程式會變得特別卡,這時候我們可以通過資料庫連接池來解決這個問題。

  用串連池來管理Connection,這可以重複使用Connection。有了池,所以我們就不用自己來建立Connection,而是通過池來擷取Connection對象。當使用完Connection後,調 用Connection的close()方法也不會真的關閉Connection,而是把Connection“歸還”給池。池就可以再利用這個Connection對象了。

  常用的串連池:
          1).DBCP串連池:Apache公司的免費、開源的串連池實現。Apache公司的Tomcat伺服器內部就是採用的DBCP串連池。
          2).C3P0串連池:免費、開源的。在長時間啟動並執行情況下,C3P0內部的資源釋放方面的功能要比DBCP要強大。世界主流架構:Spring架構、Hibernate架構內部
     採用的就是C3P0串連池。

  按照這個原理,我自己寫了一個簡易的資料庫連接池,考慮的不是很周全,僅供參考,有興趣的朋友可以定義一個邏輯更加嚴謹的串連池。

  首先寫一個設定檔,將串連資料庫的資訊寫入設定檔:

  

1 driverClassName=com.mysql.jdbc.Driver2 url=jdbc:mysql://localhost:3306/student3 username=root4 password=123456

  自訂資料庫連接池代碼:

 1 package connectionpool; 2  3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 import java.sql.SQLException; 6 import java.util.LinkedList; 7 import java.util.Properties; 8  9 import javax.sql.DataSource;10 11 //建立一個自訂資料庫連接池;12 public class JDBCPool{13     //通過LinkedList集合來儲存Connection對象,用來類比onnection對象的重複利用過程;14     //初始化connection對象的個數;15     //定義最大的連線物件;16     //定義串連池最少需要留取的對象17     private static LinkedList<Connection> link;18     private static Properties p;19     private static int initCount=5;20     private static int maxCount=10;21     private static int minCount=1;22     //通過靜態代碼塊來實現註冊驅動;23     static{24          p= new Properties();25         try {26             p.load(JDBCPool.class.getClassLoader().getResourceAsStream("dpconfig.properties"));27             Class.forName(p.getProperty("driverClassName"));28             link = new LinkedList<Connection>();29         } catch (Exception e) {30             throw new RuntimeException();31         }32     33     }34     //通過構造方法來實現初始化的Connection對象的個數;35     //我這裡是初始化的Connection對象是5個;36     public JDBCPool(){37         for (int i = 0; i <initCount; i++) {38             try {39                 this.link.addFirst(this.createConnection());40             } catch (SQLException e) {41                 42                 e.printStackTrace();43             }44         }45     }46     //建立Connection對象的方法,如果大於最小的建立好的Connection對象,就直接取出去;47     //如果沒有的話,就判斷是否到達最大的串連數,沒到達的話,就建立一個;48     //我沒有對不滿足兩種情況進行處理,有興趣的朋友可以嘗試一下;49     private Connection getConnetion(){50         synchronized(link){if(link.size()>minCount){51             return link.removeFirst();52         }if(link.size()<maxCount){53             try {54                 return this.createConnection();55             } catch (SQLException e) {56                 57                 e.printStackTrace();58             }59         }60         return null;61         }62     }63     //用來建立Connection對象的64     public Connection createConnection() throws SQLException{65         return DriverManager.getConnection(p.getProperty("url"),p.getProperty("username"),p.getProperty("password"));66     }67     //回收時是將Connection取回到集合,並不是關閉68     public void free(Connection conn){69         this.link.addLast(conn);70     }71 }

 

  

Java-自訂簡單的mysql資料庫連接池

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.