1. 程式人生 > >JAVA連線Mysql資料庫,如何建立連線池

JAVA連線Mysql資料庫,如何建立連線池

連線池:

頻繁的資料連線操作勢必佔用很多的系統資源,相應速度必定下降,程式出現異常而未能關閉,將會導致資料庫系統中的記憶體洩漏,最終將不得不重啟資料庫,系統資源被毫無顧及的分配出去,如連線過多,也可能導致記憶體洩漏,伺服器崩潰。

連線池為資料庫建立一個“緩衝池”,預先在緩衝區中放入一定數量的連線,當需要資料庫連線時,只需從”緩衝池“中取出一個,使用完畢後在放回去,通過設定連線池最大連線數來防止系統無休止的資料連線。更為重要的是可以通過連線池的管理機制監視資料庫的連線數量,使用情況。為系統開發、測試、效能調整提供依據。

工作流程:

如果沒有空閒連線,則檢查當前所開連線池是否達到允許的最大連線數,如果沒有就新建一個連線,如果達到,就等待一定時間,如果在等待時間內有連線釋放,就可以把這個連線分配給等待的使用者。如果等待時間超過還沒有連線釋放,則返回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();
		}
	   }
}