クラス TransactionAwareDataSourceProxy
- 実装されたすべてのインターフェース:
WrapperSE
、CommonDataSourceSE
、DataSourceSE
、InitializingBean
DataSource
SE のプロキシ。Spring 管理のトランザクションの認識を追加します。Jakarta EE サーバーによって提供されるトランザクション JNDI DataSource に似ています。Spring のデータアクセスサポートを認識しないままにする必要があるデータアクセスコードは、このプロキシと連携して、Spring 管理のトランザクションにシームレスに参加できます。トランザクションマネージャー、たとえば DataSourceTransactionManager
は、このプロキシではなく、基礎となる DataSource で動作する必要があることに注意してください。
TransactionAwareDataSourceProxy が DataSource プロキシ / アダプターのチェーンの最も外側の DataSource であることを確認してください。TransactionAwareDataSourceProxy は、ターゲット接続プールに直接委譲するか、LazyConnectionDataSourceProxy
や UserCredentialsDataSourceAdapter
などの中間プロキシ / アダプターに委譲できます。
DataSourceTransactionManager
によって管理されているスレッドバインドされたトランザクションに自動的に参加するための DataSourceUtils
へのデリゲート。返された接続での getConnection
呼び出しと close
呼び出しは、トランザクション内で適切に動作します。つまり、常にトランザクション接続で動作します。トランザクション内にない場合、通常の DataSource の動作が適用されます。
このプロキシを使用すると、データアクセスコードはプレーンな JDBC API で動作し、Jakarta EE/JTA 環境の JDBC コードと同様に、Spring 管理のトランザクションに参加できます。ただし、可能であれば、Spring の DataSourceUtils、JdbcTemplate、JDBC 操作オブジェクトを使用して、ターゲット DataSource のプロキシがなくてもトランザクションに参加できるため、最初にそのようなプロキシを定義する必要がありません。
さらなる効果として、トランザクション対応の DataSource を使用すると、残りのトランザクションタイムアウトが、作成されたすべての JDBC(準備済み / 呼び出し可能)ステートメントに適用されます。つまり、標準 JDBC を介して実行されるすべての操作は、Spring 管理のトランザクションタイムアウトに自動的に参加します。
注意 : この DataSource プロキシは、close 呼び出しを適切に処理するために、(ConnectionProxy
インターフェースを実装する)ラップされた接続を返す必要があります。Wrapper.unwrap(java.lang.Class<T>)
SE を使用してネイティブ JDBC 接続を取得します。
コンストラクターのサマリー
コンストラクター説明新しい TransactionAwareDataSourceProxy を作成します。TransactionAwareDataSourceProxy
(DataSourceSE targetDataSource) 新しい TransactionAwareDataSourceProxy を作成します。メソッドのサマリー
修飾子と型メソッド説明Spring 管理のトランザクションに自動的に参加する DataSourceUtils へのデリゲート。protected ConnectionSE
getTransactionAwareConnectionProxy
(DataSourceSE targetDataSource) すべてのメソッド呼び出しを委譲するが、close()
呼び出しは DataSourceUtils に委譲するプロキシを使用して、指定された接続をラップします。void
setLazyTransactionalConnections
(boolean lazyTransactionalConnections) 実際のデータアクセス時にトランザクション対象の Connection を遅延取得するかどうかを指定します。void
setReobtainTransactionalConnections
(boolean reobtainTransactionalConnections) トランザクション内で実行される各操作のターゲット接続を再取得するかどうかを指定します。protected boolean
shouldObtainFixedConnection
(DataSourceSE targetDataSource) プロキシの固定ターゲット接続を取得するか、各操作のターゲット接続を再取得するかを決定します。クラス org.springframework.jdbc.datasource.DelegatingDataSource から継承されたメソッド
afterPropertiesSet, createConnectionBuilder, createShardingKeyBuilder, getConnection, getLoginTimeout, getLogWriter, getParentLogger, getTargetDataSource, isWrapperFor, obtainTargetDataSource, setLoginTimeout, setLogWriter, setTargetDataSource, unwrap
コンストラクターの詳細
TransactionAwareDataSourceProxy
public TransactionAwareDataSourceProxy()新しい TransactionAwareDataSourceProxy を作成します。TransactionAwareDataSourceProxy
新しい TransactionAwareDataSourceProxy を作成します。- パラメーター:
targetDataSource
- ターゲット DataSource
メソッドの詳細
setLazyTransactionalConnections
public void setLazyTransactionalConnections(boolean lazyTransactionalConnections) 実際のデータアクセス時にトランザクション対象の Connection を遅延取得するかどうかを指定します。デフォルトは "true" です。"false" を指定すると、トランザクション対応の Connection ハンドルが取得されたときに、ターゲットの Connection を即座に取得します。
- 導入:
- 6.1.2
setReobtainTransactionalConnections
public void setReobtainTransactionalConnections(boolean reobtainTransactionalConnections) トランザクション内で実行される各操作のターゲット接続を再取得するかどうかを指定します。デフォルトは "false" です。"true" を指定すると、接続プロキシのすべての呼び出しでトランザクション接続が再取得されます。トランザクションの境界を越えて接続ハンドルを保持している場合、これは JBoss で推奨されます。
この設定の効果は、"hibernate.connection.release_mode" 値 "after_statement" と同様です。
getConnection
Spring 管理のトランザクションに自動的に参加する DataSourceUtils へのデリゲート。元の SQLException がある場合はそれをスローします。返された Connection ハンドルは ConnectionProxy インターフェースを実装し、基になるターゲット Connection を取得できるようにします。
- 次で指定:
- インターフェース
DataSourceSE
のgetConnection
- オーバーライド:
- クラス
DelegatingDataSource
のgetConnection
- 戻り値:
- トランザクション接続がある場合はそれ、新しい接続がある場合
- 例外:
SQLExceptionSE
- 関連事項:
getTransactionAwareConnectionProxy
すべてのメソッド呼び出しを委譲するが、close()
呼び出しは DataSourceUtils に委譲するプロキシを使用して、指定された接続をラップします。- パラメーター:
targetDataSource
- 接続元の DataSource- 戻り値:
- ラップされた接続
- 関連事項:
shouldObtainFixedConnection
プロキシの固定ターゲット接続を取得するか、各操作のターゲット接続を再取得するかを決定します。デフォルトの実装では、すべての標準ケースで
true
が返されます。これは、アクティブなトランザクション内で非固定のターゲット接続を強制する"reobtainTransactionalConnections"
フラグによってオーバーライドできます。非トランザクションアクセスは常に固定接続を使用することに注意してください。- パラメーター:
targetDataSource
- ターゲット DataSource