簡體   English   中英

會話終止后無法將JDBC與Oracle重新連接

[英]Can't reconnect JDBC with Oracle after session gets killed

我們這里有一個基於servlet的應用程序,但是我們遇到了問題。 這是發生了什么:在oracle超時之后(例如,如果我們下班后回到家並嘗試第二天登錄應用程序),我們會收到很多錯誤和異常,例如:連接關閉,關閉的語句等。

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

我們要做的是,有一個名為system-proj的主項目,這是所有其他模塊(由maven設置)的先決條件,並且我們將所有 .war文件部署在tomcat中。

重新啟動tomcat可解決問題。 就那么簡單。

我的問題是,有什么方法可以在重新啟動Tomcat的 情況下重新建立此連接? 否則,如果需要重新啟動Tomcat(或自動重新加載單個.war ),是否有任何方法可以做到這一點?

我看不出我在哪里錯了。

根據您的描述,我認為您正在使用數據庫池。 連接池是將使用的一組預先創建的數據庫連接,並將它們重新用於服務多個請求。 在空閑時間中,數據庫連接在數據庫服務器上超時,並且變得無效,因此長時間不活動后會出現錯誤。 重新啟動Tomcat時,您正在連接池中重新創建新連接,從而解決了該問題。

如果您使用的是數據庫池,那么如果在x分鍾內未使用連接,則可以使用隨機查詢ping數據庫(例如-Oracle上的“從選項卡中選擇count(*)”)。 x應該小於數據庫的空閑連接超時時間。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM