Berikut adalah alur peristiwa untuk menggambarkan apa yang terjadi:
- Koneksi diminta dan digunakan oleh pemanggil (aplikasi atau kumpulan koneksi)
- Penelepon menyimpan referensinya sehingga koneksi dapat digunakan kembali
- Penelepon melewati periode tidak aktif (misalnya, sistem dev semalaman atau sistem QA selama akhir pekan).
- Setelah koneksi database tidak digunakan, database menganggap koneksi tidak aktif. Karena idle, setelah jangka waktu tertentu (default MySQL adalah 8 jam) database menutup koneksi.
- Penelepon masih memiliki pegangan untuk koneksi, dan ketika penelepon mencoba menggunakan koneksi lagi dengan tidak menyenangkan, dia menemukan bahwa koneksi telah ditutup.
Alasan autoReconnect=true berfungsi, dan kumpulan yang menguji validitas koneksi berfungsi, adalah karena Anda menginstruksikan sistem panggilan untuk menguji koneksi untuk situasi ini dan mencoba lagi jika situasi ini terjadi.
Adapun apakah kueri validasi akan memengaruhi kinerja:Secara teori itu menggunakan koneksi untuk melakukan sesuatu. Dalam praktiknya, ada sesuatu yang sangat sepele sehingga efeknya dapat diabaikan dalam konteks keseluruhan sistem Anda.
[EDIT]
Dalam hal ini Apache DBCP adalah kumpulan koneksi yang bergantung pada koneksi, tetapi Anda TIDAK ingin DBCP menutup koneksi setelah setiap panggilan. Maksud dari kumpulan koneksi adalah untuk menjaga koneksi tetap siap untuk panggilan berikutnya karena membuat koneksi itu mahal. Objek koneksi yang dikelola oleh kumpulan didukung oleh koneksi database aktual, dan database adalah orang yang menutup koneksi aktual itu setelah periode waktu tunggu idle. Perhatikan bahwa batas waktu untuk menutup koneksi idle dikonfigurasi pada database, bukan pada kumpulan koneksi. Karena itu, DBCP tidak memiliki cara untuk mengetahui apakah koneksi telah ditutup atau tidak, kecuali jika benar-benar mencoba untuk terhubung dengannya. Itulah mengapa Anda memerlukan kueri validasi.
Untuk informasi selengkapnya tentang mengonfigurasi DBCP, lihat halaman konfigurasi dan dokumen API .