sql >> Database teknologi >  >> RDS >> Mysql

Konfigurer GlassFish JDBC-forbindelsespulje til at håndtere Amazon RDS Multi-AZ-failover

Som jeg kommenterede før, er det fordi de sockets, der er åbne og forbundet til databasen, ikke er klar over, at forbindelsen er gået tabt, så de forblev forbundet, indtil OS socket timeout udløses, hvilket jeg læste, normalt kan være om cirka 30 minutter .

For at løse problemet skal du tilsidesætte socket Timeout i din JDBC Connection String eller i JDNI Connection Configuration/Properties for at definere socketTimeout param til en mindre tid.

Husk, at enhver forbindelse, der er længere end den definerede værdi, vil blive dræbt, selvom den bliver brugt (jeg har ikke været i stand til at bekræfte dette, er hvad jeg læste).

De to andre parametre, jeg nævner i min kommentar, er connectTimeout og autoReconnect .

Her er min JDBC-forbindelsesstreng:

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

Jeg deaktiverede også Javas DNS-cache ved at gøre

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

Jeg gør dette, fordi Java ikke respekterer TTL'erne, og når failoveren finder sted, er DNS'en den samme, men IP'en ændres.

Da du bruger en applikationsserver, skal parametrene for at deaktivere DNS-cache overføres til JVM'en, når glassfish startes med -Dnet og ikke selve applikationen.




  1. Introduktion til FORALL-erklæring i Oracle-databasen

  2. SQL 1064 Syntaksfejl ved brug af en JDBC-forberedt sætning

  3. Hvorfor er denne Hibernate MySQL-forbindelse skrivebeskyttet?

  4. Sådan indsætter du data i tabellen ved hjælp af lagrede procedurer i postgresql