各位大大好 有CONNECTION POOL的問題想請教大家
我現在建立了兩個CONNECTION POOL 的 DataSource 一個是連ORACLE 一個是連SQL
SERVER
org.apache.tomcat.jdbc.pool.DataSource datasource1 = new
org.apache.tomcat.jdbc.pool.DataSource();//ORACLE
org.apache.tomcat.jdbc.pool.DataSource datasource2 = new
org.apache.tomcat.jdbc.pool.DataSource();//SQL SERVER
程式碼約如下
public class XXXXXXXXServlet extends HttpServlet {
Connection conn1 = null;
Connection conn2 = null;
try{
conn1=datasource1.getConnection();
讀取ORACLE的資料做事情
} catch (Exception e) {
} finally{
conn1.close();做完關閉
}
//最後連接SQL SERVER 關閉資料庫
try{
conn2=datasource2.getConnection();
將每次連線ORACLE的資料作紀錄 存在SQLERVER
} catch (Exception e) {
} finally{
conn2.close();做完關閉
}
}
但現在遇到一個問題,有時候datasource1達到最大使用量了,因此後面的進來Servlet的
連線無法讀取到資料庫
但是最後datasource2又會將每次連線做紀錄,但因為datasource1的POOL滿了讀取不到資
料,造成datasource2紀錄的值為空值,
請問該怎麼解決?
讓datasource1排隊的連線排到之後datasource2再去做紀錄
不要datasource2直接做紀錄 造成有空值的狀況發生
作者: inxbone (高級少量糖果) 2018-08-09 19:38:00
最簡單不是設flag 然後datasource1 catch到exception 改變flag datasource2 判斷flag決定要不要做
作者:
kogrs (kogrs)
2018-08-10 03:13:001.一開始就同時要兩個connection,降低要不到的可能性2.向第二個ds要connection時,設計retry 機制,降低問題發生3.第二個ds看起來只是log,那就把這段用另外的thread處理也就是非同步處理就好
Exception 還是不要隨便catch-and-ignore 比較好, 除此以外應該可以用try-resource 一併取得兩個connection. 一併成功取得後才工作