2010-01-19 113 views
1

我編程在Java中一個WebService創建和調用這個類:關閉SQL連接的Java web服務

public class Manager{ 

     private Connection aConnection; 


     public CacheManager(){ 
      //We get a connection 
       aConnection = java.sql.DriverManager.getConnection("jdbc:mysql://localhost/mydb?user=root&password="; 


     } 
// Insert a datalist into a table 
    public void insertIntoDB(List listData, String tableName, StringData previousData) 
    { 

     // Some code using database 

     } 

的主要問題是,web服務的調用之後的連接不會關閉。這意味着對Web服務的100個調用會創建100個到數據庫的連接。它會創建MySQL錯誤「連接的用戶過多」如果等待2分鐘,則垃圾收集器將銷燬對象,並且Web服務可以再次工作。

有人有關於如何繞過這個問題的想法嗎?

謝謝!

回答

0

我必須在glassfish上創建一個連接池,然後每當我需要連接到我的程序中時,我就會'建立一個連接,然後立即釋放它。我不再在構造函數中獲得連接,只是在我的函數中。

0

我認爲你應該維護一個數據庫連接池。例如,您可以參考C3P0。這樣,當你初始化這個類時,在構造函數中,你可以設置數據庫連接池(比如10個到數據庫的連接)。在insertIntoDB方法中,首先從連接池中獲取連接,執行數據庫CRUD操作,最後將連接返回到池。通過這種方式,您不會通過創建多個連接來對數據庫施加壓力。 每次調用創建連接也會使其更慢,threr是Connection Thrashing上的反模式。