Pourquoi ne autoReconnect=true ne semble pas fonctionner?
Je suis à l'aide de JDBC pour se connecter à un serveur MySQL (pas de regroupement de connexion, je pense). Dans l'URL de connexion, j'ai autoReconnect=true
Mais ma connexion encore temps. J'ai même vérifié conn.isClosed()
et de son faux. Mais lorsque j'essaie d'utiliser la connexion, j'obtiens l'exception suivante.
com.mysql.jdbc.CommunicationsException: lien de Communication à l'échec en raison sous-jacente de l'exception: ** COMMENCER EXCEPTION IMBRIQUÉE ** java.net.Exception socketexception MESSAGE: Logiciel a provoqué l'abandon de la connexion: prise d'erreur d'écriture STACKTRACE: java.net.Exception socketexception: Logiciel a provoqué l'abandon de la connexion: prise d'erreur d'écriture ...
Je sais que dans la version 1.6 de Java, vous pouvez utiliser conn.isValid(0)
pour vérifier la connexion, mais je suis en utilisant Java 1.5
Est-il un moyen de s'assurer qu'il n'a pas le temps? Ou vais-je le mettre à niveau vers la version 1.6 de Java?
Vous devez vous connecter pour publier un commentaire.
J'ai eu le même problème et c'était absolument affolant. Voici ce que les docs disent sur le site web de MySQL (l'emphase est mienne)
Si le pilote à tenter de rétablir vicié et/ou les connexions mortes? Si activée, le pilote lève une exception pour les requêtes émises sur la rassis ou de la mort de la connexion, qui appartiennent à la transaction en cours, mais va tenter de vous reconnecter avant la prochaine requête émise sur le lien dans une nouvelle transaction. L'utilisation de cette fonction n'est pas recommandée, car il a des effets secondaires liés à l'état de session et la cohérence des données lorsque les applications ne gèrent pas SQLExceptions correctement, et est uniquement conçu pour être utilisé lorsque vous n'arrivez pas à configurer votre application pour gérer SQLExceptions résultant de morts et obsolètes connexions correctement. Sinon, enquêter sur la configuration du serveur MySQL variable "wait_timeout" à haute valeur plutôt que la valeur par défaut de 8 heures.
Dans mon expérience, il ne semble pas que la "reconnexion sur la requête suivante" fonctionnalité travaillé, mais j'ai été en utilisant MySQL 4.0, ce qui peut avoir été la raison de cela.
J'ai fini par écrire un mini-cadre qui attrape les exceptions, les contrôles pour que l'erreur spécifique, et les tentatives de reconnexion et relancez la requête si possible.
ETA: Ce lien fournit des informations un peu plus, et indique que autoReconnect sera probablement supprimée dans le futur de toute façon.
autoReconnect jette toujours l'exception de sorte que vous pouvez choisir de faire quelque chose à propos de la situation si vous le souhaitez. Si vous l'attrapez, vous devriez trouver que la connexion est de nouveau là par la suite. (Il y a un peu plus de complexité si vous êtes dans une transaction -- votre transaction en cours est assez mort.)