Di properti konfigurasi Anda, Anda telah menggunakan properti c3p0 maxIdleTime, tetapi properti c3p0 dikonfigurasi menggunakan c3p0.
awalan atau hibernate.c3p0.
. Perhatikan bahwa mengaktifkan salah satu c3p0
properties secara otomatis mengaktifkan penyedia koneksi yang sesuai dengan heuristik hibernasi. Di log tidak terlihat bahwa Anda menggunakan c3p0. Jika Anda tidak mengonfigurasi sumber data maka Hibernate akan menggunakan hibernate.connection.provider_class org.hibernate.connection.DriverManagerConnectionProvider
. Penyedia koneksi ini memiliki kumpulan koneksi dasar bawaan yang dapat Anda atur hibernate.connection.pool_size
, tetapi hanya digunakan untuk tujuan pengembangan. Jangan pernah menggunakannya di lingkungan produksi.
Anda mungkin memiliki diskusi tanpa akhir tentang topik Cara memperbaiki java.net.SocketException:Pipa rusak . Setelah beberapa waktu Anda akan menyadari bahwa Anda tetap terbuka koneksi di kolam, yang tiba-tiba ditutup di sisi lain karena alasan berikut:
- Firewall atau router dapat menghentikan koneksi yang tidak aktif (protokol klien/server MySQL tidak berfungsi).
- Server MySQL mungkin menutup koneksi idle yang melebihi
wait_timeout
atauinteractive_timeout
ambang.
Untuk membantu memecahkan masalah ini, tips berikut dapat digunakan:
- Digunakan versi terbaru (5.1.13+) driver JDBC.
- Pastikan bahwa
wait_timeout
daninteractive_timeout
ditetapkan cukup tinggi. Periksa apakahinteractiveClient
digunakan. - Pastikan bahwa
tcpKeepalive
diaktifkan. - Pastikan bahwa semua setelan waktu habis firewall atau router yang dapat dikonfigurasi memungkinkan waktu siaga koneksi maksimum yang diharapkan.
- Pastikan koneksi valid saat digunakan dari kumpulan koneksi. Gunakan kueri yang dimulai dengan
/* ping */
untuk mengeksekusi ping ringan alih-alih kueri penuh. Perhatikan, sintaks ping harus persis seperti yang ditentukan di sini. - Memvalidasi koneksi secara eksplisit sebelum menggunakannya jika koneksi tidak digunakan untuk waktu yang lama.
- Minimalkan durasi objek koneksi dibiarkan menganggur saat logika aplikasi lain dijalankan.
Untuk mematuhi beberapa opsi ini, Anda sebaiknya menggunakan kumpulan koneksi yang dapat Anda gunakan dengan Hibernate. Hibernate memiliki dukungan untuk commons-dbcp, c3p0, dan proxool. Anda juga dapat mengonfigurasi sumber data JNDI di server web untuk digunakan dengan hibernasi, ia memiliki kumpulan koneksi. Lihat Bab 7 Penggabungan Koneksi dengan Konektor/J .
Jika Anda ingin mengonfigurasi Hibernate dengan c3p0 Anda harus membaca Cara mengonfigurasi kumpulan koneksi C3P0 . Untuk konfigurasi contoh dbcp Anda harus memeriksa posting ini MySQL, Hibernate, dan Pengecualian Pipa Rusak . Penyatuan koneksi apa pun yang akan Anda gunakan terserah Anda.