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

Hvorfor skal jeg tømme forbindelsespuljen, hver gang jeg ominstallerer?

Din rodårsag, PoolingException: javax.resource.spi.LocalTransactionException: Communications link failure er relateret til denne Glassfish-fejl , som forklarer (i kommentarfanen nederst), at du muligvis skal opdatere dine ugyldige forbindelser.

Fejlkommentaren af ​​Jagadish siger for at kontrollere din forbindelsesvalideringstype. Hvis den er indstillet til "autocommit" (standard), kan JDBC-driverne cache de tidligere forbindelsesvalideringsdata, og der vil ikke ske nogen egentlig databaseinteraktion under fremtidige forbindelsesvalideringer.

For at løse problemet skal du indstille connection-validation-method="table" og validation-table-name="any_table_you_know_exists" (erstat any_table_you_know_exists med navnet på en eksisterende tabel). Gør du dette tvinger forbindelserne til at tale til databasen i stedet for cachen; hvis forbindelsen er ugyldig, vil den blive afbrudt og genskabt. Du skal muligvis også angive is-connection-validation-required="true" .

Artikler til hjælp med yderligere konfiguration:

  1. Denne artikel forklarer også problemet i detaljer.
  2. Jagadishs Oracle-blogartikel om dette emne har flere oplysninger.
  3. Artikel der forklarer Glassfish JDBC Connection Validation i detaljer.

Tekst fra Jagadishs blog:

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

Bemærk, at prøvekoden refererer til sys.systables , som er en MS SQL-tabel, der med garanti eksisterer. For Oracle, se den garanterede tabel dual . For MySQL skal du oprette en 1-kolonne tabel udelukkende til valideringsformål; spil det sikkert, og udfyld tabellen på forhånd ved at indsætte en række data.



  1. Sådan får du sidste 1 times data i MySQL

  2. SQL WHERE kolonne =alt

  3. Mysql Vælg gensidige par af poster uden dubletter

  4. brug en variabel til tabelnavn i mysql sproc