Mysql
 sql >> база данни >  >> RDS >> Mysql

Конфигурирайте пул за връзки на GlassFish JDBC, за да управлявате превключване на Amazon RDS Multi-AZ

Както коментирах по-рано, това е, защото гнездата, които са отворени и свързани към базата данни, не осъзнават, че връзката е загубена, така че те останаха свързани, докато не се задейства времето за изчакване на сокета на ОС, което прочетох, че обикновено може да бъде за около 30 минути .

За да разрешите проблема, трябва да замените изчакването на сокета във вашия низ за връзка JDBC или в конфигурацията/свойствата на JDNI връзка, за да дефинирате socketTimeout параметър на по-малко време.

Имайте предвид, че всяка връзка, по-дълга от дефинираната стойност, ще бъде убита, дори ако се използва (не успях да потвърдя това, това, което прочетох).

Другите два параметъра, които споменавам в коментара си, са connectTimeout и автоматично повторно свързване .

Ето моя JDBC низ за връзка:

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

Деактивирах също DNS кеша на Java, като направих

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

Правя това, защото Java не зачита TTL-ите и когато се осъществи отказът, DNS-ът е същият, но IP-то се променя.

Тъй като използвате сървър на приложения, параметрите за деактивиране на DNS кеша трябва да бъдат предадени на JVM при стартиране на glassfish с -Dnet, а не на самото приложение.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как мога да копирам един ред/запис от един MySQL екземпляр в друг?

  2. Мога ли да използвам ON DUPLICATE KEY UPDATE със заявка INSERT, използвайки опцията SET?

  3. Вмъкнете В MySQL ОТ друга таблица

  4. Защо трябва да използвам външен ключ, ако мога да използвам WHERE?

  5. Архивирайте mysql база данни и изтеглете като файл