1. 程式人生 > >資料庫連線池用法之(common-dbcp)

資料庫連線池用法之(common-dbcp)

程式中如果想要用資料庫連線池。可以用commons-dbcp-1.4.jar。該jar會配合commons-pool-1.6.jar來使用。
具體來說明如何使用dbcp資料庫連線池。


1 建立一個數據源物件(需要引入:import org.apache.commons.dbcp.BasicDataSource;)
private static final BasicDataSource dataSource;


2 得到資料庫引數(該設定程式碼放在類的static塊中,當類被使用時,會第一時間先執行static塊中程式碼):


aisHistory.properties配置檔案內容如下:
connection.url = jdbc\:oracle\:thin\:@192.168.1.119\:1521\:AISH
driver.class = oracle.jdbc.driver.OracleDriver
username = ais
password = ais
InitialSize=5
MaxActive=10
MaxIdle=8
MaxWait=400000
RemoveAbandonedTimeout=400
ais_batch_num=100

程式中進行設定:


ResourceBundle resourceBundle = ResourceBundle.getBundle("aisHistory");
        String url = resourceBundle.getString("connection.url");//資料庫url
        String driver = resourceBundle.getString("driver.class");//資料庫驅動類
        String user = resourceBundle.getString("username");//資料庫使用者名稱
        String password = resourceBundle.getString("password");//資料庫密碼


String s_InitialSize=resourceBundle.getString("InitialSize");//資料庫連線池初始化連線池數量
        String s_MaxActive=resourceBundle.getString("MaxActive");//資料庫連線池最大活動的連線數量
        String s_MaxIdle=resourceBundle.getString("MaxIdle");//資料庫連線池最大空閒的連線數量
        String s_MaxWait=resourceBundle.getString("MaxWait");//得到連線物件的最大等待時間
        String s_RemoveAbandonedTimeout=resourceBundle.getString("RemoveAbandonedTimeout");//得到連線物件後,多長時間後,連線池會收回連線物件
        String s_ais_batch_num=resourceBundle.getString("ais_batch_num");
        
        int int_InitialSize=AisHistoryUitl.getInt(s_InitialSize, 5);
        int int_MaxActive=AisHistoryUitl.getInt(s_MaxActive, 10);
        int int_MaxIdle=AisHistoryUitl.getInt(s_MaxIdle, 8);
        int int_MaxWait=AisHistoryUitl.getInt(s_MaxWait, 400000);
        int int_RemoveAbandonedTimeout=AisHistoryUitl.getInt(s_RemoveAbandonedTimeout, 400);


dataSource.setInitialSize(int_InitialSize);//初始連線池的連線數量 5
        dataSource.setMaxActive(int_MaxActive);//最大活動的連線數量 10
        dataSource.setMaxIdle(int_MaxIdle);//最大空閒連線的連線數量  8
        dataSource.setMaxWait(int_MaxWait);//最大等待時間  400000
        dataSource.setRemoveAbandoned(true);//是否關閉未關閉的連線, 預設為false, 改為true
        dataSource.setRemoveAbandonedTimeout(int_RemoveAbandonedTimeout);//預設為300,改為400


!!!說明(非常重要):
初始連線池的連線數量:是在連線池才建立的時候,就建立幾個連線。保證連線池才建立後,連線池中有幾個連線物件。


最大活動的連線數量:表示連線池中的最多的連線數量。容許程式得到的最多的連線物件的數量。


最大空閒連線的連線數量:當連線池中的連線物件未達到該值時,連線物件只增不減。當超過該值後(最多的連線物件)。
    使用完的連線物件會關閉。當資料庫併發少了後。資料庫連線數量也會維持在最大空閒連線數量和最大活動連線數量之間。
    最大空閒連線數量要儘量小於最大活動連線數量.

總體連線數量永遠不會超過最大活動連線數量。即使訪問資料庫的併發數量少了,連線數量也不會減少,將保持在最大空閒連線數量。


最大等待時間:程式中要得到連線物件。如果超過最大等待時間還未得到連線物件,則視為超時,表示得不到連線物件。


回收時間:表示得到連線物件後。如果超過回收時間,則連線池會回收該連線物件(將該連線物件關閉,回收到池中)。


連線池預設是不自動關閉未關閉的連線物件的。需要設定removeAbandoned為true。預設是false。


3 得到連線物件
connection=dataSource.getConnection();


4 得到連線物件後。使用完畢後。需要關閉。關閉的順序是ResultSet、Statement、Connection
if (rs != null) {
             rs.close();
        }
        if (st != null) {
             st.close();
        }
        if (conn != null) {
             conn.close();
        }


需要好好理解。資料庫連線池。


這是用到的資料庫連線池是commons-dbcp-1.4.jar


嘗試了commons-dbcp-2.1.1.jar但是配合oracle資料庫時(用的驅動包是oracle14.jar),老是報錯。報oracle的驅動錯誤。
故暫時先用commons-dbcp-1.4.jar


這裡用的資料庫連線池是commons-dbcp-1.4.jar