2016-06-28 71 views
0

我們有一個基於servlet的應用程序,我們遇到了問題。以下是發生了什麼情況:在oracle超時之後(比如下班後回家並嘗試在第二天登錄應用程序),我們會收到很多錯誤和異常,如:連接關閉,關閉語句和其他。會話被終止後無法重新連接JDBC與Oracle

一種模擬此錯誤的方法是以管理員身份訪問oracle會話並在使用過程中查殺會話。這樣做會發生同樣的問題。

我們做的是,我們有一個叫做系統凸出一個主要項目是先決條件的所有其它模塊(Maven的設置),以及我們在Tomcat中部署所有.war文件。

問題通過重新啓動tomcat來解決。就那麼簡單。

我的問題是,是否有重新建立這種連接沒有重新啓動Tomcat的任何方式?否則,如果重新啓動Tomcat(或自動重新加載一個.war)是必要的,有沒有辦法做到這一點?

我看不出我在哪裏錯了。

回答

1

從你的描述我認爲你正在使用數據庫池。連接池是預先創建的一堆數據庫連接,將被使用,並重新用於提供多個請求。在空閒時間內,數據庫連接在數據庫服務器上超時,並失效,因此長時間處於非活動狀態後會出現錯誤。當您重新啓動Tomcat時,您將在連接池中重新創建新連接,從而解決問題。

如果您使用的是數據庫池,那麼如果在x分鐘內沒有使用連接,則可以使用隨機查詢(例如 - 從Oracle的選項卡中選擇count(*))來ping數據庫。 x應該小於數據庫的空閒連接超時時間。

另一個更簡單的解決方案是打開數據庫連接,執行數據庫操作,然後關閉數據庫連接,而不是使用數據庫池。由於連接是按需創建的,因此您沒有超時問題。雖然這是一個簡單的解決方案,但這可能不是一個可行的解決方案,因爲獲取新連接會產生一些開銷。

相關問題