Saat menggunakan Connection Pool, haruskah seseorang menutup Connection di akhir? Jika demikian, bukankah tujuan pooling hilang? Dan jika tidak, bagaimana DataSource mengetahui kapan instance tertentu dari Connection dibebaskan dan dapat digunakan kembali? Saya sedikit bingung dalam hal ini, setiap petunjuk dihargai.
Ya, tentu Anda juga harus menutup pooled connection. Ini sebenarnya pembungkus koneksi yang sebenarnya. Ini akan di bawah selimut melepaskan koneksi yang sebenarnya kembali ke kolam. Selanjutnya terserah pada pool untuk memutuskan apakah koneksi yang sebenarnya akan benar-benar ditutup atau digunakan kembali untuk getConnection()
baru panggilan. Jadi, terlepas dari apakah Anda menggunakan kumpulan koneksi atau tidak, Anda harus selalu tutup semua sumber daya JDBC dalam urutan terbalik di finally
blok try
blokir tempat Anda mendapatkannya. Di Java 7 ini dapat lebih disederhanakan dengan menggunakan try-with-resources
pernyataan.
Apakah metode berikut mendekati standar? Sepertinya upaya untuk mendapatkan koneksi dari kumpulan, dan jika DataSource tidak dapat dibuat, gunakan DriverManager kuno. Kami bahkan tidak yakin bagian mana yang dieksekusi saat runtime. Mengulangi pertanyaan di atas, haruskah seseorang menutup Koneksi yang keluar dari metode seperti itu?
Contohnya cukup menakutkan. Anda hanya perlu mencari/menginisialisasi DataSource
hanya sekali selama startup aplikasi di beberapa konstruktor / inisialisasi kelas konfigurasi DB seluruh aplikasi. Kemudian panggil saja getConnection()
pada satu dan sumber data yang sama sepanjang sisa masa pakai aplikasi. Tidak perlu sinkronisasi atau nullchecks.
Lihat juga:
- Apakah aman menggunakan instance java.sql.Connection statis dalam sistem multithreaded?
- Apakah Saya Menggunakan Penggabungan Koneksi JDBC?