2012-11-05 92 views
3

關於默認情況下多線程的servlet,每個servlet是否實例化一個數據庫連接,或者是該servlet的所有線程之間共享的連接?servlet線程的數據庫連接?

我使用JDBC作爲我的servlet和Oracle數據庫之間的接口。

如果數據庫連接在所有線程之間共享,這是否意味着我應該使用連接池到數據庫?

/** Open the connection here **/ 
public void init() { 
    String url = "server"; 
    String username = "pwd"; 
    String password = "usr"; 
    try { 
     Class.forName("oracle.jdbc.OracleDriver"); 
     conn = DriverManager.getConnection(url, username, password); 
    } catch (Exception e) { 
     System.err.println("Error making pool: " + e); 
     conn = null; 
    } 
} 
+0

它完全取決於如何獲得連接,但您沒有顯示或描述任何相關的代碼。 –

+0

@MattBall;代碼已添加。正如你所看到的,我在servlet初始化時建立連接。 – kaleeway

回答

4

如果數據庫連接在所有線程之間共享,這是否意味着我應該使用連接池到數據庫?

是的,絕對是! JDBC連接和單線程,而不是線程安全的。只需在它們之間引入連接池,首先獲取連接並在相同請求期間儘快關閉它。

+0

請給我的問題+1請:0 – kaleeway

1

取決於你如何寫你的連接,也可以是每個小服務程序(實例變量)或全局(靜態變量 - 提供你是不是在集羣環境中,你管理併發,這將是一個嚴重的瓶頸)

但是,如果你想使你的系統高效,可靠,可擴展,更容易保持,並且不必實現更高級的功能,比如在連接失敗的情況下重新連接(我認爲考慮你的後端是Oracle),您應該查看應用程序服務器連接池機制。

+0

謝謝,這個應用程序將在一個塵土飛揚的房間裏的一個盒子上運行。 :) – kaleeway