2011-01-11 12 views
0

私は、Connector/J 5.1.14を使用してデータベースに重いJavaアプリケーションをクラスタで実行しています。したがって、同じMySQLデータベースにアクセスする最大150の同時タスクがあります。次のエラーが表示されます。MySQLとJava:可能であれば接続を開きます

Exception in thread "main" com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Too many connections 

これは、サーバーが非常に多くの接続を処理できないためです。私はデータベースサーバー上の何かを変更することはできません。だから私の質問です:私は実際にデータベースに接続する前に接続が可能かどうかを確認することはできますか?

このような何か(擬似コード):より良い動作するはずのような

check database for open connection slots 
if (slot is free) { 
    Connection cn = DriverManager.getConnection(url, username, password); 
} 
else { 
    wait ... 
} 

乾杯

答えて

3
try{ 
    //try to connect 
}catch(com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException ex) { 
    //what ever you want to do 
} 

参照:

+0

私が探していたものとまったく同じですが、私はそれをwhileループに埋め込みました。ありがとうございました。 –

0

何か。

try 
{ 
    Connection cn = DriverManager.getConnection(url, username, password); 
} 
catch (com.mysql.jdbc.exceptions.MySQLNonTransientConnection e) 
{ 
    // wait ... 
} 
1

は、たとえばC3P0用としてなどの接続プールを使用します。ビットのまともな接続プールは、特定のタイムアウトを待って、接続が利用可能になるまで一定の時間を再試行してから戻すことができます。また、接続を獲得するtryのブロックConnection#close()finallyブロックに必ず呼び出してください。それ以外の場合、接続は決してプール(プールを使用しない場合はデータベース)に解放されず、とにかくそれらを使い果たします。

+0

提案してくれてありがとう、私はC3P0を知らなかった。私の接続はすべて閉じている、それはクラスタのことだ。 –

関連する問題