sql >> Base de Datos >  >> RDS >> Mysql

Configure el grupo de conexiones GlassFish JDBC para manejar la conmutación por error de Amazon RDS Multi-AZ

Como comenté antes, se debe a que los sockets que están abiertos y conectados a la base de datos no se dan cuenta de que se ha perdido la conexión, por lo que permanecieron conectados hasta que se activa el tiempo de espera del socket del sistema operativo, lo que leí podría ser generalmente en unos 30 minutos. .

Para resolver el problema, debe anular el tiempo de espera del socket en su cadena de conexión JDBC o en la configuración/propiedades de la conexión JDNI para definir el socketTimeout. param a un tiempo menor.

Tenga en cuenta que cualquier conexión más larga que el valor definido se eliminará, incluso si se está utilizando (no he podido confirmar esto, es lo que leí).

Los otros dos parámetros que menciono en mi comentario son connectTimeout y reconexión automática .

Aquí está mi cadena de conexión JDBC:

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

También deshabilité el caché de DNS de Java haciendo

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

Hago esto porque Java no respeta los TTL y, cuando se produce la conmutación por error, el DNS es el mismo pero la IP cambia.

Dado que está utilizando un servidor de aplicaciones, los parámetros para deshabilitar la caché de DNS se deben pasar a la JVM al iniciar Glassfish con -Dnet y no a la aplicación en sí.