2016-04-20 45 views
0

我在Java EE中編寫代碼,並且有一些類可以管理我的數據庫的所有操作。何時打開和關閉與DB的連接

我在問自己什麼時候應該打開/關閉與數據庫的連接。

在每種方法中打開和關閉它會更好嗎? 還是在構造函數中打開它並在完成使用我的類時關閉它會更好?

Thx

+0

雖然這個問題很常見,但它太泛化了。添加一些例子,甚至預期的情景,否則人們會將您的問題標記爲「主要基於意見」......從文本中:許多優秀的問題根據專家的經驗產生一定程度的意見,但對這個問題的回答往往會幾乎完全基於意見,而不是事實,參考或具體專業知識。 – Bonatti

回答

1

沒有通用的解決方案。所有的決定取決於具體的任務。你應該記住下面的東西:

  1. 每次連接數據庫都是應用程序時間。如果您的方法過於頻繁,那麼您的應用程序將浪費大量時間來連接和斷開任務以及更慢的網絡。在很少打電話的情況下,它不會那麼重要;
  2. 如果您的方法長時間連接到構造函數中的數據庫而沒有任何操作,連接可能會被刪除。這不是必須的,但可能會導致網絡問題或數據庫連接策略。所以在每個查詢之前都應該用快速簡單的操作來檢查,如select 'some random text' from dual;
  3. 數據庫資源不是無限的,連接總數是有限的。這個限制可能非常大,但它仍然存在。因此,如果您的應用程序可以並行使用幾次(餓了數千次),它可能會達到永久連接的限制。

如果您沒有將來使用方法的信息,我建議使用時間有限的permament連接。它應該打開第一個查詢,並關閉定時器,如果方法沒有通過此連接查詢一段時間,如3-5秒。當然,任何查詢者都應該在查詢之前檢查連接狀態。打開它,如果它關閉,觸摸關閉計時器。並且不要忘記在析構函數處顯式關閉連接。

1

我認爲你不應該在代碼中管理它。我所從事的每個EE服務器都有連接池,以免您需要關心此問題。基本上,當你需要時你「打開」連接,當你需要時「關閉」連接。這些單詞用引號括起來,因爲當連接真正打開和關閉時,由池來管理。

從設計角度來看,只有在需要時才使用連接。對象構造沒有任何意義 - 如果類中的某個方法沒有被調用一個小時會怎麼樣?當你不需要時打開它的目的是什麼?所以如果一個方法需要連接打開並在方法中關閉它。