クラス IsolationLevelDataSourceRouter
java.lang.ObjectSE
org.springframework.jdbc.datasource.AbstractDataSource
org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource
org.springframework.jdbc.datasource.lookup.IsolationLevelDataSourceRouter
- 実装されたすべてのインターフェース:
WrapperSE
、CommonDataSourceSE
、DataSourceSE
、InitializingBean
現在のトランザクション分離レベルに基づいて、さまざまなターゲット DataSources の 1 つにルーティングする DataSource。ターゲット DataSources は、
TransactionDefinition
インターフェースで定義されているように、分離レベル名をキーとして設定する必要があります。 これは、JTA トランザクション管理 (通常は Spring の JtaTransactionManager
経由) と組み合わせると特に便利です。標準 JTA は、トランザクション固有の分離レベルをサポートしていません。一部の JTA プロバイダーは、ベンダー固有の拡張機能 (WebLogic など) として分離レベルをサポートしており、これがこの問題に対処するための推奨される方法です。別の方法として (たとえば、WebSphere の場合)、ターゲットデータベースは、それぞれ異なる分離レベルで構成された複数の JNDI DataSources で表すことができます (DataSource 全体に対して)。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
- 関連事項:
AbstractRoutingDataSource.setTargetDataSources(java.util.Map<java.lang.Object, java.lang.Object>)
AbstractRoutingDataSource.setDefaultTargetDataSource(java.lang.Object)
TransactionDefinition.ISOLATION_READ_UNCOMMITTED
TransactionDefinition.ISOLATION_READ_COMMITTED
TransactionDefinition.ISOLATION_REPEATABLE_READ
TransactionDefinition.ISOLATION_SERIALIZABLE
JtaTransactionManager
フィールドのサマリー
クラス org.springframework.jdbc.datasource.AbstractDataSource から継承されたフィールド
logger
コンストラクターの概要
コンストラクターメソッドのサマリー
修飾子と型メソッド説明protected ObjectSE
現在の検索キーを決定します。protected ObjectSE
resolveSpecifiedLookupKey
(ObjectSE lookupKey) TransactionDefinition interface
で定義されている分離レベル名のほか、分離レベル定数の整数値をサポートします。クラス org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource から継承されたメソッド
afterPropertiesSet, createConnectionBuilder, createShardingKeyBuilder, determineTargetDataSource, getConnection, getConnection, getResolvedDataSources, getResolvedDefaultDataSource, initialize, isWrapperFor, resolveSpecifiedDataSource, setDataSourceLookup, setDefaultTargetDataSource, setLenientFallback, setTargetDataSources, unwrap
クラス org.springframework.jdbc.datasource.AbstractDataSource から継承されたメソッド
getLoginTimeout, getLogWriter, getParentLogger, setLoginTimeout, setLogWriter
コンストラクターの詳細
IsolationLevelDataSourceRouter
public IsolationLevelDataSourceRouter()
メソッドの詳細
resolveSpecifiedLookupKey
TransactionDefinition interface
で定義されている分離レベル名のほか、分離レベル定数の整数値をサポートします。- オーバーライド:
- クラス
AbstractRoutingDataSource
のresolveSpecifiedLookupKey
- パラメーター:
lookupKey
- ユーザーが指定したルックアップキーオブジェクト- 戻り値:
- マッチングに必要なルックアップキー
determineCurrentLookupKey
クラスからコピーされた説明:AbstractRoutingDataSource
現在の検索キーを決定します。これは通常、スレッドにバインドされたトランザクションコンテキストをチェックするために実装されます。任意のキーを許可します。返されるキーは、
AbstractRoutingDataSource.resolveSpecifiedLookupKey(java.lang.Object)
メソッドによって解決されるように、保存されているルックアップキー型と一致する必要があります。- 次で指定:
- クラス
AbstractRoutingDataSource
のdetermineCurrentLookupKey