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