私は2年前に同じ問題に直面し、最終的に「春のカスタムスコープ」(http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#beans-factory-scopes-custom)に基づいて実装を選択しました。
スプリングフレームワークでは、同じBean定義の複数のインスタンスを共存させることができます。それらは、いくつかのコンテキスト設定としか異なる。
例えば、このBeanの定義は、「ドメイン」と呼ばれるカスタムスコープを作成する場合
<bean id="loginAction" class="com.foo.LoginAction" scope="request"/>
は、あなたがに基づいていくつかのデータソースをインスタンス化することができるようになります現在処理HTTPリクエストに応じて様々なLoginActionのBeanを作成します。同じBean定義。
JndiObjectFactoryBeanに基づくデータソースBean定義は、サーブレットコンテナが(web.xmlファイルを介して)データベース接続を管理できるようにします。ただし、Springプロパティを使用してデータソース名を変更する必要があります。
データベーストランザクションマネージャーのようなBeansにも、このスコープでマークする必要があります。
次に、HTTPリクエストが実行されるたびに有効範囲を有効にする必要があります。データソース名をリクエストURLのプレフィックスとして定義することをお勧めします。
ほとんどのWebフレームワークでは、HTTP要求をインターセプトできるため、要求を処理する前に予期したデータソースを取得できます。
次に、作成(または再利用)、選択したデータソースに固有の豆のセットと、ThreadLocal変数内に格納(カスタムスコープの実装がに依存すること)
この実装は、一見少し複雑になりますその使用法は透過的に見えます。