Saya tidak berpikir bahwa membuat koneksi database thread-safe adalah praktik umum. Biasanya yang Anda inginkan adalah:
- Serialisasikan akses ke beberapa bagian servlet Anda, sehingga tidak ada lebih dari satu kode yang mengeksekusi servlet pada satu waktu (misalnya, menerapkan
SingleThreadModel
antarmuka). - Mengunci tabel / halaman tabel / baris tertentu sehingga Anda dapat beroperasi pada beberapa tupel tertentu (dengan mengubah tingkat isolasi database).
- Menggunakan penguncian optimis untuk mendeteksi baris yang dimodifikasi dalam tabel (menggunakan beberapa atribut referensi tabel untuk memeriksa apakah versi saat ini sama dengan yang ada di tabel).
AFAIK, penggunaan khas ThreadLocal<Connection>
adalah menyimpan koneksi database unik per utas, sehingga koneksi yang sama dapat digunakan dalam metode yang berbeda dalam logika bisnis Anda tanpa perlu meneruskannya sebagai parameter setiap kali. Karena implementasi wadah servlet umum menggunakan utas untuk memenuhi permintaan HTTP, maka dua permintaan yang berbeda dijamin menggunakan dua koneksi database yang berbeda.