Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Dlaczego muszę opróżniać pulę połączeń za każdym razem, gdy ponownie wdrażam?

Twoja główna przyczyna, PoolingException: javax.resource.spi.LocalTransactionException: Communications link failure jest powiązany z tym błędem Glassfish , który wyjaśnia (na karcie komentarzy na dole), że może być konieczne odświeżenie nieprawidłowych połączeń.

Komentarz o błędzie autorstwa Jagadish mówi, aby sprawdzić typ walidacji połączenia. Jeśli jest ustawiony na „autocommit” (domyślnie), sterowniki JDBC mogą buforować dane z wcześniejszego sprawdzania połączenia, a podczas przyszłej weryfikacji połączenia nie nastąpi żadna rzeczywista interakcja z bazą danych.

Aby rozwiązać problem, ustaw connection-validation-method="table" i validation-table-name="any_table_you_know_exists" (zastąp any_table_you_know_exists z nazwą dowolnej istniejącej tabeli). Spowoduje to, że połączenia będą komunikować się z bazą danych zamiast z pamięcią podręczną; jeśli połączenie jest nieprawidłowe, zostanie odrzucone i ponownie utworzone. Konieczne może być również określenie is-connection-validation-required="true" .

Artykuły pomocne przy dodatkowej konfiguracji:

  1. Ten artykuł wyjaśnia również szczegółowo problem.
  2. Artykuł na blogu Jagadish Oracle na ten temat ma więcej informacji.
  3. Artykuł wyjaśniając szczegółowo weryfikację połączenia Glassfish JDBC.

Tekst z bloga Jagadisha:

AS_INSTALL_ROOT/bin/asadmin set domain.resources.jdbc-connection-pool.DerbyPool.is-connection-validation-required=true
domain.resources.jdbc-connection-pool.DerbyPool.is-connection-validation-required = true

AS_INSTALL_ROOT/bin/asadmin set domain.resources.jdbc-connection-pool.DerbyPool.connection-validation-method=table
domain.resources.jdbc-connection-pool.DerbyPool.connection-validation-method = table

bin/asadmin set domain.resources.jdbc-connection-pool.DerbyPool.validation-table-name=sys.systables
domain.resources.jdbc-connection-pool.DerbyPool.validation-table-name = sys.systables

Zauważ, że przykładowy kod odnosi się do sys.systables , który jest tabelą MS SQL, której istnienie jest gwarantowane. W przypadku Oracle zapoznaj się z tabelą gwarantowaną dual . W przypadku MySQL utwórz tabelę 1-kolumnową wyłącznie do celów walidacji; baw się bezpiecznie i wstępnie wypełnij tabelę, wstawiając jeden wiersz danych.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. JDBC:klucz obcy na PK utworzony w tej samej transakcji

  2. Migracja bazy danych Oracle do MySQL na AWS, część 2

  3. Najszybszy i najbardziej wydajny sposób na pobranie rekordu ze zdalnego MySQL na iPhone'a

  4. Sumuj wartości tablicy wielowymiarowej według klucza bez pętli

  5. MySQL ORDER BY [niestandardowa wartość pola SET]