[問題] CONNECTION POOL的問題消失

看板java作者時間7年前 (2018/08/09 13:51), 編輯推噓0(009)
留言9則, 3人參與, 最新討論串1/1
各位大大好 有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直接做紀錄 造成有空值的狀況發生 -- ╲ ◢▅◢▅◣ ╱ 親愛的妳要找什麼阿~██ ███在前面!!! ◤◥◥ ◢◢◢ ◥◥我找到了! 為什麼...我的心裡 你在這邊 ◣-- 會有種蛋蛋的哀傷呢? ◣▽ ◢ 等我一下唷~ ▂▂▂◣╯ ▂▂▂▂▂▂▂ψQSWEET -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 211.22.145.125 ※ 文章網址: https://www.ptt.cc/bbs/java/M.1533793916.A.622.html

08/09 19:38, , 1F
最簡單不是設flag 然後datasource1 catch到exception 改
08/09 19:38, 1F

08/09 19:38, , 2F
變flag datasource2 判斷flag決定要不要做
08/09 19:38, 2F

08/10 03:13, , 3F
1.一開始就同時要兩個connection,降低要不到的可能性
08/10 03:13, 3F

08/10 03:15, , 4F
2.向第二個ds要connection時,設計retry 機制,降低問題發生
08/10 03:15, 4F

08/10 03:17, , 5F
3.第二個ds看起來只是log,那就把這段用另外的thread處理
08/10 03:17, 5F

08/10 03:17, , 6F
也就是非同步處理就好
08/10 03:17, 6F

08/10 09:54, , 7F
Exception 還是不要隨便catch-and-ignore 比較好, 除
08/10 09:54, 7F

08/10 09:54, , 8F
此以外應該可以用try-resource 一併取得兩個connectio
08/10 09:54, 8F

08/10 09:54, , 9F
n. 一併成功取得後才工作
08/10 09:54, 9F
文章代碼(AID): #1RQzPyOY (java)