2016-06-26 35 views
0

我有一個問題,我的應用程序隨時運行幾乎像300-400線程。所以有一些問題,我連接到mysql數據庫,拋出異常在任何時候,「數據源拒絕建立連接,來自服務器的消息:」太多連接「?」。
我檢查並確保以正確的方式關閉所有連接,我已連接到分貝。
對於處理這種方法我寫了一個方法,但我不知道這是否是正確的方法來做到這一點。此方法已用於所有線程以獲取數據庫連接。 我應該改變方法或我要補充同步到這一點,我不知道該怎麼辦有關此異常
數據源拒絕建立連接,來自服務器的消息:「連接太多」? - 多線程

public static Connection getDatabaseConnection(){ 
    try{ 
     return (Connection)DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306xxx?useUnicode=true" 
       + "&characterEncoding=utf-8", "root", "xxx"); 
    }catch(SQLException ex){ 
     Util.sleep(new Random().nextInt(1000));// Equals = Thread.sleep(...); 
     return getDatabaseConnection(); 
    } 

} 
+0

您應該使用連接池。無論如何,這個錯誤來自您的數據庫,因此請檢查您的MySQL配置。 –

+0

您也可能在某處泄漏連接。檢查每個連接是否在'finally'塊或try-with-resources語句中關閉。 – EJP

回答

1

您將創建爲每個線程數據庫連接。處理這個問題的更好方法是創建一個連接池或一個singleton類來達到db。我找到了一箇舊頁面來實現這一點:http://rdeshapriya.com/a-singleton-java-class-for-mysql-db-connection/

+0

我應該永遠不要關閉連接嗎?這種方法是否會發生泄漏等問題? –

+0

當然,您應該關閉連接,但在關閉應用程序時可以關閉它。這取決於您的應用程序,但如果您的應用程序每秒需要300次,則最好有一個連接可用。這比關閉和創建數據庫連接要好,這會花費更多的時間和資源。 – Eymen