9
votes

jdbc4 communicationSException

J'ai une machine à exécuter une application Java parlant à une instance MySQL en cours d'exécution sur la même instance. l'application Utilise les pilotes JDBC4 de MySQL. Je continue à obtenir com.mysql.jdbc.exceptions.jdbc4.communicationSexception à des moments aléatoires.

Voici tout le message. p>

n'a pas pu ouvrir la connexion JDBC pour la transaction; Une exception imbriquée est p> xxx pré>

pour mysql, la valeur de global "wait_timeout" et "interactive_timeout" est définie sur 3600 secondes et "Connect_Timeout" est défini sur 60 secondes. La valeur du délai d'attente est beaucoup plus élevée que les 26 secondes (25899 ms). mentionné dans la trace d'exception. p>

J'utilise DBCP pour la mise en commun de la connexion et voici la configuration de Spring Bean pour la DataSource. P>

   <bean id="dataSource" destroy-method="close" class="org.apache.commons.dbcp.BasicDataSource" >
          <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
                    <property name="url" value="jdbc:mysql://localhost:3306/db"/>
                <property name="username" value="xxx"/>
                <property name="password" value="xxx" />
                    <property name="poolPreparedStatements" value="false" />
            <property name="maxActive" value="3" />
            <property name="maxIdle" value="3" />
    </bean>


0 commentaires

4 Réponses :


0
votes

Je suivrais les conseils à l'exception. Vous devriez considérer soit:

  1. expirant et / ou tester la validité de la connexion avant utilisation de votre application,
  2. Augmenter les valeurs configurées du serveur pour les délais d'attente du client, ou
  3. Utilisation de la propriété Connector / J Connection 'Autoreconnect = TRUE' pour éviter ce problème. Essayez d'ajouter cela à votre URL de connexion (consultez les docs pour la syntaxe exacte) et voyez si cela aide.

    Je doute que C3P0 soit aussi mieux que le DBCP que vous utilisez déjà. L'exception vous donne des conseils spécifiques. Vous avez essayé # 3. Qu'en est-il des deux autres?

    Je sais comment demander à Weblogic de vérifier les connexions avant de les utiliser. Vous devriez savoir comment faire la même chose avec Tomcat.


1 commentaires

Essayé de sortir, maintenant "ne pouvait pas ouvrir la connexion JDBC pour la transaction; une exception imbriquée est com.mysql.jdbc.excepts.jdbc4.comMunicationSexception: défaillance de la liaison de communication"



1
votes

Pouvez-vous décrire comment votre application manipule la mise en commun de la connexion? Je doute que Autoreconnect = true dans le pilote JDBC rétablisse des connexions de votre application. L'application doit se reconnecter lorsqu'il perd une connexion.


0 commentaires

0
votes

J'ai vu avant que les machines Windows qui ont été déplacées sur le réseau ont eu des problèmes avec se connectant à eux-mêmes.

Y a-t-il des problèmes de connectivité à l'extérieur du client JVM - I.e. MySQL Connexion au serveur, et chronométrage, etc.


0 commentaires

6
votes

Essayez de configurer correctement le DBCP Apache Commons DBCP.

Vous devez définir:

  • validationQuery à sélectionner 1 + 1
  • Testonbornor to true

    qui devrait résoudre le problème.


0 commentaires