Mysql
 sql >> Base de données >  >> RDS >> Mysql

Configurer le pool de connexions GlassFish JDBC pour gérer le basculement Amazon RDS Multi-AZ

Comme je l'ai déjà commenté, c'est parce que les sockets qui sont ouverts et connectés à la base de données ne réalisent pas que la connexion a été perdue, ils sont donc restés connectés jusqu'à ce que le délai d'attente du socket du système d'exploitation soit déclenché, ce que j'ai lu pourrait être généralement dans environ 30 minutes .

Pour résoudre le problème, vous devez remplacer le délai d'expiration du socket dans votre chaîne de connexion JDBC ou dans la configuration/les propriétés de la connexion JDNI pour définir le socketTimeout param à un temps plus petit.

Gardez à l'esprit que toute connexion plus longue que la valeur définie sera supprimée, même si elle est utilisée (je n'ai pas été en mesure de le confirmer, c'est ce que j'ai lu).

Les deux autres paramètres que je mentionne dans mon commentaire sont connectTimeout et reconnexion automatique .

Voici ma chaîne de connexion JDBC :

jdbc:(...)&connectTimeout=15000&socketTimeout=60000&autoReconnect=true 

J'ai également désactivé le cache DNS de Java en faisant

 java.security.Security.setProperty("networkaddress.cache.ttl" , "0"); 
 java.security.Security.setProperty("networkaddress.cache.negative.ttl" , "0"); 

Je le fais parce que Java ne respecte pas les TTL, et lorsque le basculement a lieu, le DNS est le même mais l'IP change.

Puisque vous utilisez un serveur d'application, les paramètres pour désactiver le cache DNS doivent être passés à la JVM lors du démarrage du glassfish avec -Dnet et non à l'application elle-même.