Tôi không nghĩ rằng làm cho các kết nối cơ sở dữ liệu an toàn theo luồng là một thực tế phổ biến. Thông thường những gì bạn muốn là:
- Tuần tự hóa quyền truy cập vào một số phần của servlet của bạn để không có nhiều hơn một mã thực thi servlet tại một thời điểm (ví dụ:triển khai
SingleThreadModel
giao diện). - Khóa một bảng / trang / hàng bảng cụ thể để bạn có thể thao tác trên một số bộ cụ thể (bằng cách thay đổi mức cách ly cơ sở dữ liệu).
- Sử dụng khóa lạc quan để phát hiện các hàng đã sửa đổi trong bảng (sử dụng một số thuộc tính tham chiếu của bảng để kiểm tra xem phiên bản hiện tại có giống với phiên bản trong bảng hay không).
AFAIK, cách sử dụng thông thường của ThreadLocal<Connection>
là lưu trữ một kết nối cơ sở dữ liệu duy nhất cho mỗi luồng, để kết nối tương tự có thể được sử dụng trong các phương thức khác nhau trong logic nghiệp vụ của bạn mà không cần chuyển nó dưới dạng tham số mỗi lần. Bởi vì việc triển khai vùng chứa servlet phổ biến sử dụng một luồng để thực hiện một yêu cầu HTTP, nên hai yêu cầu khác nhau được đảm bảo sử dụng hai kết nối cơ sở dữ liệu khác nhau.