sql >> Databasteknik >  >> RDS >> Mysql

Varför måste jag spola anslutningspoolen varje gång jag distribuerar om?

Din grundorsak, PoolingException: javax.resource.spi.LocalTransactionException: Communications link failure är relaterad till denna Glassfish-bug , som förklarar (i kommentarfliken längst ner) att du kan behöva uppdatera dina ogiltiga anslutningar.

Buggkommentaren av Jagadish säger för att kontrollera din anslutningsvalideringstyp. Om den är inställd på "autocommit" (standard), kan JDBC-drivrutinerna cachelagra tidigare anslutningsvalideringsdata, och ingen faktisk databasinteraktion kommer att ske under framtida anslutningsvalideringar.

För att lösa problemet, ställ in connection-validation-method="table" och validation-table-name="any_table_you_know_exists" (ersätt any_table_you_know_exists med namnet på en befintlig tabell). Om du gör detta tvingar anslutningarna att prata med databasen istället för cachen; om anslutningen är ogiltig kommer den att avbrytas och återskapas. Du kan också behöva ange is-connection-validation-required="true" .

Artiklar som hjälper dig med ytterligare konfiguration:

  1. Den här artikeln förklarar också problemet i detalj.
  2. Jagadishs Oracle-bloggartikel om detta ämne har mer information.
  3. Artikel förklarar Glassfish JDBC Connection Validation i detalj.

Text från Jagadishs blogg:

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

Observera att exempelkoden hänvisar till sys.systables , som är en MS SQL-tabell som garanterat finns. För Oracle, se den garanterade tabellen dual . För MySQL, skapa en tabell med en kolumn endast för valideringsändamål; spela säkert och fyll i tabellen i förväg genom att infoga en rad med data.



  1. Räkna alla poster som inte finns till annan tabell - SQL Query

  2. Fatalt fel:Maximal körningstid på 30 sekunder har överskridits i C:

  3. PHP och MySQL:Beställ enligt senaste datum och begränsa 10

  4. MySQL CSV-import:datetime-värde