JAVA連線Mysql資料庫,如何建立連線池
阿新 • • 發佈:2019-02-03
連線池:
頻繁的資料連線操作勢必佔用很多的系統資源,相應速度必定下降,程式出現異常而未能關閉,將會導致資料庫系統中的記憶體洩漏,最終將不得不重啟資料庫,系統資源被毫無顧及的分配出去,如連線過多,也可能導致記憶體洩漏,伺服器崩潰。
連線池為資料庫建立一個“緩衝池”,預先在緩衝區中放入一定數量的連線,當需要資料庫連線時,只需從”緩衝池“中取出一個,使用完畢後在放回去,通過設定連線池最大連線數來防止系統無休止的資料連線。更為重要的是可以通過連線池的管理機制監視資料庫的連線數量,使用情況。為系統開發、測試、效能調整提供依據。
工作流程:
如果沒有空閒連線,則檢查當前所開連線池是否達到允許的最大連線數,如果沒有就新建一個連線,如果達到,就等待一定時間,如果在等待時間內有連線釋放,就可以把這個連線分配給等待的使用者。如果等待時間超過還沒有連線釋放,則返回null
持久層BaseDao
package com.lovo.dao.impl; import java.io.File; import java.io.FileReader; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.Properties; import org.apache.commons.dbcp.BasicDataSource; public class BaseDao { protected Connection con; protected PreparedStatement ps; protected ResultSet rs; //建立連線池物件 private static BasicDataSource dbs = new BasicDataSource(); //將連線資料庫的資訊放在了source/connection.txt中 static{ File file = new File("source"); if(!file.exists()){//如果目錄不存在建立目錄 file.mkdir(); } Properties pro = new Properties(); try { //載入檔案 pro.load(new FileReader("source/connection.txt")); } catch (Exception e) { e.printStackTrace(); } //設定要載入的驅動類 dbs.setDriverClassName(pro.getProperty("driver")); //連線資料庫的url dbs.setUrl(pro.getProperty("url")); //資料庫使用者名稱 dbs.setUsername(pro.getProperty("userName")); //資料庫密碼 dbs.setPassword(pro.getProperty("passWord")); //最大連線數 dbs.setMaxActive(50); //最小連線數 dbs.setMaxIdle(20); //等待時間,一毫秒為單位 dbs.setMaxWait(1000); } /** * 得到連線 */ public void getConnection(){ try { this.con = dbs.getConnection(); } catch (Exception e) { e.printStackTrace(); } } /** * 關閉連線 */ public void close(){ try { if (rs!=null) { this.rs.close(); } if (ps!=null) { this.ps.close(); } if (con!=null) { this.con.close(); } } catch (Exception e) { e.printStackTrace(); } } }