2012-11-20 53 views
2

我們有一個企業Java項目,它大量使用Oracle數據庫,支持數百個併發用戶,並且在過去的10年中已有數十位開發人員觸及。每隔一段時間,開發人員都會忘記關閉Connection,PreparedStatement或ResultSet對象,並且當用戶全天使用系統時,打開的連接會累加,直到Oracle拋出「Max Open Cursors」錯誤。我們已經增加了數據庫中的最大開放遊標值,讓我們感到滿意。在Java代碼中查找數據庫連接的最佳方式是什麼?

是否有軟件或可能用於掃描數千行Java代碼並查找所有這些數據庫對象保持打開狀態的技術?我們希望運行一次以查找所有當前位置,然後定期查找任何新位置。提前致謝。

+0

您可以使用http://www.topcased.org/(Eclipse/Java和其他OpenSource工具)和許多功能強大且安全的(Airbus測試mehtod)工具來發現關鍵系統中的所有缺陷 –

回答

3

你可以嘗試在源代碼上運行FindBugs,該代碼應該可以在任何未關閉的連接上運行。有發現此漏洞的列表:

http://findbugs.sourceforge.net/bugDescriptions.html

查找開始ODR的人。

+0

在您可以使用的NetBeans上它作爲一個插件。只需選擇您的項目,然後點擊「源代碼」檢查...'並選擇'Findbugs',如果你沒有並且將運行檢查,它應該自動安裝它。如果你在巡視窗口按類別分組,你應該在'壞習慣|方法可能無法關閉數據庫資源' – cirovladimir

1

這取決於您是否使用任何ConnectionPooling機制。如果是這樣,那麼連接池將檢查所有打開的連接。如果您已經實施了自己的游泳池,那麼您需要重新訪問代碼以合併此檢查。

0

Findbugs一直擅長檢測是連接沒有正確關閉,還有很多其他問題。

我們將它用作maven插件,在'網站'目標期間調用該插件。結合持續集成工具(如Jenkins),可以自動檢測此類潛在問題。

相關問題