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

Защо трябва да промивам пула за връзки всеки път, когато преразпределя?

Вашата основна причина, PoolingException: javax.resource.spi.LocalTransactionException: Communications link failure е свързано с този бъг в Glassfish , което обяснява (в раздела за коментари в долната част), че може да се наложи да опресните невалидните си връзки.

Коментарът за грешка от Jagadish казва да проверите вашия тип валидиране на връзката. Ако е зададено на „autocommit“ (по подразбиране), JDBC драйверите може да кешират данните за предишна проверка на връзката и няма да се случи реално взаимодействие с базата данни по време на бъдещи валидации на връзката.

За да разрешите проблема, задайте connection-validation-method="table" и validation-table-name="any_table_you_know_exists" (заменете any_table_you_know_exists с името на всяка съществуваща таблица). Правейки това принуждава връзките да разговарят с базата данни вместо с кеша; ако връзката е невалидна, тя ще бъде отхвърлена и пресъздадена. Може да се наложи също да посочите is-connection-validation-required="true" .

Статии за помощ при допълнителна конфигурация:

  1. Тази статия също обяснява подробно проблема.
  2. Статия в блога на Jagadish в Oracle по тази тема има повече информация.
  3. Статия обяснява подробно валидирането на Glassfish JDBC връзката.

Текст от блога на Джагадиш:

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

Имайте предвид, че примерният код се отнася до sys.systables , което е MS SQL таблица, която гарантирано съществува. За Oracle вижте гарантираната таблица dual . За MySQL създайте таблица с 1 колона единствено за целите на валидиране; играйте на сигурно и предварително попълнете таблицата, като вмъкнете един ред данни.



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

  2. как да актуализирате базата данни последователно с помощта на mysql

  3. условно присъединяване в mysql

  4. Как да четете sql заявка към pandas dataframe / python / django

  5. Грешка ETIMEDOUT при запитване на mysql база данни