Ето потока от събития, за да илюстрира какво се случва:
- Връзка се иска и използва от обаждащия се (приложение или пул за връзки)
- Обаждащият се запазва препратка към него, за да може връзката да бъде използвана повторно
- Обаждащият се преминава през период на неактивност (например система за разработчици през нощта или система за QA през уикенда).
- След като връзката към базата данни не се използва, базата данни счита, че връзката е неактивна. Тъй като е неактивна, след определен период от време (по подразбиране на MySQL е 8 часа) базата данни затваря връзката.
- Обаждащият се все още има манипулатор на връзката и когато обаждащият се опита отново да използва връзката, открива неприятно, че връзката е затворена.
Причината, поради която autoReconnect=true работи и че пулът, тестващ валидността на връзката, работи, е, че вие инструктирате извикващата система да тества връзката за тази ситуация и да опита отново, ако тази ситуация се случи.
Що се отнася до това дали заявката за валидиране ще повлияе на производителността:на теория тя използва връзка, за да направи нещо. На практика нещо е толкова тривиално, че ефектът му е незначителен в контекста на цялата ви система.
[РЕДАКТИРАНЕ]
В този случай Apache DBCP е пулът за връзки, който виси на връзката, но НЕ искате DBCP да затваря връзката след всяко повикване. Целта на пула от връзки е да поддържа връзка готова за следващото обаждане, защото създаването на връзки е скъпо. Обектите за връзка, поддържани от пула, са подкрепени от действителни връзки към базата данни и базата данни е тази, която затваря тази действителна връзка след периода на изчакване на неактивност. Имайте предвид, че времето за изчакване за затваряне на неактивни връзки се конфигурира в базата данни, а не в пула за връзки. Поради това DBCP няма начин да разбере дали връзката е била затворена или не, освен ако действително не се опита да се свърже с нея. Ето защо имате нужда от заявка за валидиране.
За повече информация относно конфигурирането на DBCP вижте страницата за конфигуриране и документите за API .