データベース接続をスレッドセーフにすることは一般的な方法ではないと思います。通常、必要なものは次のいずれかです。
- サーブレットの一部へのアクセスをシリアル化して、一度にコードを実行するサーブレットが1つだけになるようにします(例:
SingleThreadModel
の実装) インターフェース)。 - 特定のテーブル/テーブルページ/行をロックして、特定のタプルを操作できるようにします(データベースの分離レベルを変更することにより)。
- 楽観的ロックを使用してテーブル内の変更された行を検出します(テーブルの参照属性を使用して、現在のバージョンがテーブル内のバージョンと同じかどうかを確認します)。
AFAIK、ThreadLocal<Connection>
の一般的な使用法 スレッドごとに一意のデータベース接続を格納することで、毎回パラメータとして渡す必要なしに、ビジネスロジックのさまざまなメソッドで同じ接続を使用できるようにします。一般的なサーブレットコンテナの実装ではスレッドを使用してHTTPリクエストを実行するため、2つの異なるリクエストが2つの異なるデータベース接続を使用することが保証されます。