クラス IsolationLevelDataSourceRouter

実装されたすべてのインターフェース:
WrapperSECommonDataSourceSEDataSourceSEInitializingBean

public class IsolationLevelDataSourceRouter extends AbstractRoutingDataSource
現在のトランザクション分離レベルに基づいて、さまざまなターゲット DataSources の 1 つにルーティングする DataSource。ターゲット DataSources は、TransactionDefinition インターフェースで定義されているように、分離レベル名をキーとして設定する必要があります。

これは、JTA トランザクション管理 (通常は Spring の JtaTransactionManager 経由) と組み合わせると特に便利です。標準 JTA は、トランザクション固有の分離レベルをサポートしていません。一部の JTA プロバイダーは、ベンダー固有の拡張機能 (WebLogic など) として分離レベルをサポートしています。これは、これに対処するための推奨される方法です。代替手段 (WebSphere など) として、ターゲットデータベースは、それぞれが異なる分離レベル (DataSource 全体に対して) で構成された複数の JNDI DataSources を通じて表すことができます。IsolationLevelDataSourceRouter を使用すると、現在のトランザクションの分離レベルに基づいて、適切な DataSource に透過的に切り替えることができます。

例: ターゲット DataSources が "myRepeatableReadDataSource"、"mySerializableDataSource"、"myDefaultDataSource" という名前の個別の Spring Bean として定義されていると仮定すると、構成は次のようになります。

 <bean id="dataSourceRouter" class="org.springframework.jdbc.datasource.lookup.IsolationLevelDataSourceRouter">
   <property name="targetDataSources">
     <map>
       <entry key="ISOLATION_REPEATABLE_READ" value-ref="myRepeatableReadDataSource"/>
       <entry key="ISOLATION_SERIALIZABLE" value-ref="mySerializableDataSource"/>
     </map>
   </property>
   <property name="defaultTargetDataSource" ref="myDefaultDataSource"/>
 </bean>
または、キー設定された値は、DataSourceLookup を介して解決されるデータソース名にすることもできます。デフォルトでは、標準の JNDI ルックアップの JNDI 名です。これにより、個別の DataSource Bean 定義を必要とせずに、単一の簡潔な定義が可能になります。
 <bean id="dataSourceRouter" class="org.springframework.jdbc.datasource.lookup.IsolationLevelDataSourceRouter">
   <property name="targetDataSources">
     <map>
       <entry key="ISOLATION_REPEATABLE_READ" value="java:comp/env/jdbc/myrrds"/>
       <entry key="ISOLATION_SERIALIZABLE" value="java:comp/env/jdbc/myserds"/>
     </map>
   </property>
   <property name="defaultTargetDataSource" value="java:comp/env/jdbc/mydefds"/>
 </bean>
メモ: このルーターを Spring の JtaTransactionManager と組み合わせて使用している場合は、"allowCustomIsolationLevels" フラグを "true" に切り替えることを忘れないでください。(標準の JTA 自体には分離レベルのサポートがないため、デフォルトでは、JtaTransactionManager はデフォルトの分離レベルのみを受け入れます。)
 <bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager">
   <property name="allowCustomIsolationLevels" value="true"/>
 </bean>
導入:
2.0.1
作成者:
Juergen Hoeller, Sam Brannen
関連事項:
  • コンストラクターの詳細

    • IsolationLevelDataSourceRouter

      public IsolationLevelDataSourceRouter()
  • メソッドの詳細