問我固定關係到我們使用的BasicDataSource,雖然我理解它的一部分我還有一些懸而未決的問題:)關於org.apache.commons.dbcp.BasicDataSource
問題的方式了一些bug: 數據庫失敗後,該應用程序無法自動連接到數據庫。
應用程序使用org.apache.commons.dbcp.BasicDataSource class作爲連接到Oracle數據庫的JDBC連接的TCP連接池。
修復: 經過一番研究,我發現在BasicDataSource testOnBorrow和testOnreturn沒有設置。我提供了驗證查詢來測試連接。這解決了問題
馬克斯沒有在池中的連接設置爲1
我的理解: 連接池將移交給應用程序的連接。 我認爲發生的事情是應用程序MAGICALLY當數據庫崩潰時將不良集合返回到池中。現在,由於Pool不知道它是否是錯誤的連接,它會在下次需要它時將相同的連接移交給應用程序,導致應用程序不能自動重新連接到db。
現在,修復後,每當一個錯誤的連接返回到連接池時,它將被丟棄並且不會再次使用,因爲我在上面做了修復。
現在我知道BasicDataSource在給予應用程序之前封裝連接,以便每當應用程序說con.close ..BasicDataSource會知道連接不再使用..它會照顧或者返回連接游泳池或discardigg等
懸而未決的問題: 但是我不明白是什麼使應用奇蹟般地返回到連接池時,它打破了連接[注意con.close方法不當連接不正常退出時調用]。 BasicDataSource沒有辦法知道連接已關閉或存在?有人可以指示我爲此編碼嗎?
我的整體理解連接爲什麼修復工作?
我同意。我的觀點是,當應用程序崩潰時,JVM可能沒有機會執行conn.close()。 – codeObserver 2011-02-02 05:55:03
我認爲這裏拋棄意味着[偶像x時間]。在這種情況下,應用程序[持續重試]應該始終[最終]獲得健康的連接,因爲廢棄的連接被刪除。這沒有發生。我認爲出於某種原因,在特定超時之後,如果偶數不管數據庫是否關閉,連接池就會將連接返回到池中,並將其交給應用程序。 – codeObserver 2011-02-02 06:00:25