Her er strømmen af begivenheder for at illustrere, hvad der sker:
- En forbindelse anmodes om og bruges af den, der ringer (applikation eller forbindelsespulje)
- Den, der ringer, gemmer en reference til den, så forbindelsen kan genbruges
- Den, der ringer op, gennemgår en periode med inaktivitet (f.eks. et udviklersystem natten over eller et QA-system i weekenden).
- Når databaseforbindelsen ikke er i brug, betragter databasen forbindelsen som inaktiv. Fordi den er inaktiv, lukker databasen forbindelsen efter et vist tidsrum (MySQL-standard er 8 timer).
- Den, der ringer op, har stadig et håndtag til forbindelsen, og når den, der ringer, forsøger at bruge forbindelsen igen, opdager han ubehageligt, at forbindelsen er blevet lukket.
Årsagen til, at autoReconnect=true virker, og at puljen, der tester forbindelsens gyldighed, virker, er, at du instruerer det kaldende system til at teste forbindelsen for denne situation og prøve igen, hvis denne situation opstår.
Med hensyn til om valideringsforespørgslen vil påvirke ydeevnen:I teorien er det at bruge en forbindelse til at gøre noget. I praksis er noget så trivielt, at dets virkning er ubetydelig i sammenhæng med hele dit system.
[EDIT]
I dette tilfælde er Apache DBCP forbindelsespuljen, der hænger på forbindelsen, men du ønsker IKKE, at DBCP lukker forbindelsen efter hvert opkald. Pointen med forbindelsespuljen er at holde en forbindelse klar til næste opkald, fordi det er dyrt at oprette forbindelser. De forbindelsesobjekter, der vedligeholdes af puljen, understøttes af faktiske databaseforbindelser, og databasen er den, der lukker den faktiske forbindelse efter den inaktive timeoutperiode. Bemærk, at timeout for at lukke inaktive forbindelser er konfigureret på databasen, ikke på forbindelsespuljen. På grund af dette har DBCP ingen mulighed for at vide, om forbindelsen er blevet lukket eller ej, medmindre den faktisk forsøger at oprette forbindelse til den. Det er derfor, du har brug for en valideringsforespørgsel.
For mere information om konfiguration af DBCP, se konfigurationssiden og API-dokumenterne .