2011-01-11 3 views
0

J'utilise une application Java lourde pour la base de données sur un cluster, en utilisant Connector/J 5.1.14. Par conséquent, j'ai jusqu'à 150 tâches simultanées accédant à la même base de données MySQL. Je reçois l'erreur suivante:MySQL avec Java: Connexion ouverte uniquement si possible

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

Cela se produit car le serveur ne peut pas gérer autant de connexions. Je ne peux rien changer sur le serveur de base de données. Donc ma question est: Puis-je vérifier si une connexion est possible AVANT de me connecter à la base de données?

Quelque chose comme ça (pseudo code):

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

Vive

Répondre

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

Voir aussi:

+0

Exactement ce que je cherchais, je l'ai intégré dans une boucle while. Je vous remercie. –

0

Quelque chose comme devrait mieux fonctionner.

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

Utilisez un pool de connexion comme par exemple C3P0. Un pool de connexions un peu décent peut attendre un certain délai et réessayer un certain nombre de fois jusqu'à ce qu'une connexion soit disponible, puis le renvoyer. Assurez-vous également que vous appelez Connection#close() dans finally bloc de chaque try où vous acquérir la connexion. Sinon, la connexion n'est jamais libérée au pool (ou à la base de données lorsque vous n'utilisez pas de pool) et vous en manquerez de toute façon.

+0

Merci pour la suggestion, je ne connaissais pas C3P0. Toutes mes connexions sont fermées, c'est une chose de cluster. –

Questions connexes