クラス LazyConnectionDataSourceProxy
- 実装されているすべてのインターフェース:
WrapperSE、CommonDataSourceSE、DataSourceSE、InitializingBean
この DataSource プロキシにより、実際に必要な場合を除き、プールから JDBC 接続をフェッチすることを回避できます。JDBC トランザクション制御は、プールから接続を取得したり、データベースと通信したりせずに実行できます。これは、JDBC ステートメントの最初の作成時に遅延して行われます。
LazyConnectionDataSourceProxy と TransactionAwareDataSourceProxy の両方を構成する場合、後者が最も外側の DataSource であることを確認してください。このようなシナリオでは、データアクセスコードはトランザクション対応の DataSource と通信し、DataSource は LazyConnectionDataSourceProxy と連動します。
物理 JDBC 接続の遅延フェッチは、一般的なトランザクション境界環境で特に役立ちます。これにより、実際のデータアクセスが発生しない場合にパフォーマンスを犠牲にすることなく、データアクセスを実行する可能性のあるすべてのメソッドでトランザクションを区別できます。
この DataSource プロキシは、DataSourceTransactionManager や HibernateTransactionManager などのローカルトランザクション戦略を使用しても、JTA およびトランザクション JNDI DataSource(Jakarta EE サーバーによって提供される)に類似した動作を提供します。トランザクション戦略として Spring の JtaTransactionManager を使用しても、付加価値はありません。
特に二次キャッシュで結果を解決する可能性が高い場合、Hibernate での読み取り専用操作の場合、JDBC 接続の遅延フェッチもお勧めします。これにより、このような読み取り専用操作でデータベースと通信する必要がまったくなくなります。非トランザクション読み取りでも同じ効果が得られますが、JDBC 接続の遅延フェッチにより、トランザクションで読み取りを実行できます。
注意 : この DataSource プロキシは、実際の JDBC 接続の遅延フェッチを処理するために、(ConnectionProxy インターフェースを実装する)ラップされた接続を返す必要があります。Wrapper.unwrap(java.lang.Class<T>)SE を使用してネイティブ JDBC 接続を取得します。
- 導入:
- 1.1.4
- 作成者:
- Juergen Hoeller
- 関連事項:
コンストラクターの概要
コンストラクターコンストラクター説明新しい LazyConnectionDataSourceProxy を作成します。LazyConnectionDataSourceProxy(DataSourceSE targetDataSource) 新しい LazyConnectionDataSourceProxy を作成します。メソッドのサマリー
修飾子と型メソッド説明voidprotected voidデフォルトの接続プロパティ(自動コミット、トランザクション分離)を確認し、ターゲット DataSource から実際の JDBC 接続を取得せずに正しく公開できるようにします。protected BooleanSEデフォルトの自動コミット値を公開します。protected IntegerSEデフォルトのトランザクション分離値を公開します。ステートメント(または PreparedStatement または CallableStatement)を要求されたときに実際の JDBC 接続を遅延フェッチする接続ハンドルを返します。getConnection(StringSE username, StringSE password) ステートメント(または PreparedStatement または CallableStatement)を要求されたときに実際の JDBC 接続を遅延フェッチする接続ハンドルを返します。voidsetDefaultAutoCommit(boolean defaultAutoCommit) ターゲット接続がまだフェッチされていない場合(実際の JDBC 接続のデフォルトがまだ不明な場合)に公開するように、デフォルトの自動コミットモードを設定します。voidsetDefaultTransactionIsolation(int defaultTransactionIsolation) ターゲット接続がまだフェッチされていない場合(実際の JDBC 接続のデフォルトがまだ不明な場合)に公開するデフォルトのトランザクション分離レベルを設定します。voidsetDefaultTransactionIsolationName(StringSE constantName) ConnectionSE の対応する定数の名前でデフォルトのトランザクション分離レベルを設定します。クラス org.springframework.jdbc.datasource.DelegatingDataSource から継承されたメソッド
getLoginTimeout, getLogWriter, getParentLogger, getTargetDataSource, isWrapperFor, obtainTargetDataSource, setLoginTimeout, setLogWriter, setTargetDataSource, unwrapクラス java.lang.ObjectSE から継承されたメソッド
clone, equalsSE, finalize, getClass, hashCode, notify, notifyAll, toString, wait, waitSE, waitSEインターフェース javax.sql.CommonDataSourceSE から継承されたメソッド
createShardingKeyBuilderインターフェース javax.sql.DataSourceSE から継承されたメソッド
createConnectionBuilder
コンストラクターの詳細
LazyConnectionDataSourceProxy
public LazyConnectionDataSourceProxy()新しい LazyConnectionDataSourceProxy を作成します。LazyConnectionDataSourceProxy
新しい LazyConnectionDataSourceProxy を作成します。- パラメーター:
targetDataSource- ターゲット DataSource
メソッドの詳細
setDefaultAutoCommit
public void setDefaultAutoCommit(boolean defaultAutoCommit) ターゲット接続がまだフェッチされていない場合(実際の JDBC 接続のデフォルトがまだ不明な場合)に公開するように、デフォルトの自動コミットモードを設定します。指定しない場合、起動時にターゲットの接続を確認することでデフォルトが決定されます。そのチェックが失敗した場合、デフォルトは接続の最初のアクセスで遅延して決定されます。
setDefaultTransactionIsolation
public void setDefaultTransactionIsolation(int defaultTransactionIsolation) ターゲット接続がまだフェッチされていない場合(実際の JDBC 接続のデフォルトがまだ不明な場合)に公開するデフォルトのトランザクション分離レベルを設定します。このプロパティは、
ConnectionSE インターフェースで定義されている int 定数値 (例: 8) を受け入れます。これは主にプログラムによる使用を目的としています。名前で値を設定するには、"defaultTransactionIsolationName" プロパティの使用を検討してください (例: "TRANSACTION_SERIALIZABLE" )。指定しない場合、起動時にターゲットの接続を確認することでデフォルトが決定されます。そのチェックが失敗した場合、デフォルトは接続の最初のアクセスで遅延して決定されます。
setDefaultTransactionIsolationName
ConnectionSE の対応する定数の名前でデフォルトのトランザクション分離レベルを設定します。"TRANSACTION_SERIALIZABLE"。afterPropertiesSet
public void afterPropertiesSet()インターフェースからコピーされた説明:InitializingBeanすべての Bean プロパティを設定し、BeanFactoryAware、ApplicationContextAwareなどを満たした後、包含BeanFactoryによって呼び出されます。このメソッドにより、Bean インスタンスは、すべての Bean プロパティが設定されたときに、その全体的な構成の検証と最終的な初期化を実行できます。
- 次で指定:
- インターフェース
InitializingBeanのafterPropertiesSet - オーバーライド:
- クラス
DelegatingDataSourceのafterPropertiesSet
checkDefaultConnectionProperties
デフォルトの接続プロパティ(自動コミット、トランザクション分離)を確認し、ターゲット DataSource から実際の JDBC 接続を取得せずに正しく公開できるようにします。これは起動時に 1 回呼び出されますが、ターゲット Connection を取得するたびに呼び出されます。起動時にチェックが失敗した場合(データベースがダウンしたため)、それらの設定を遅延的に取得します。
- パラメーター:
con- チェックに使用する接続- 例外:
SQLExceptionSE- Connection メソッドによってスローされた場合
defaultAutoCommit
デフォルトの自動コミット値を公開します。defaultTransactionIsolation
デフォルトのトランザクション分離値を公開します。getConnection
ステートメント(または PreparedStatement または CallableStatement)を要求されたときに実際の JDBC 接続を遅延フェッチする接続ハンドルを返します。返された Connection ハンドルは ConnectionProxy インターフェースを実装し、基になるターゲット Connection を取得できるようにします。
- 次で指定:
- インターフェース
DataSourceSEのgetConnection - オーバーライド:
- クラス
DelegatingDataSourceのgetConnection - 戻り値:
- 遅延接続ハンドル
- 例外:
SQLExceptionSE- 関連事項:
getConnection
ステートメント(または PreparedStatement または CallableStatement)を要求されたときに実際の JDBC 接続を遅延フェッチする接続ハンドルを返します。返された Connection ハンドルは ConnectionProxy インターフェースを実装し、基になるターゲット Connection を取得できるようにします。
- 次で指定:
- インターフェース
DataSourceSEのgetConnectionSE - オーバーライド:
- クラス
DelegatingDataSourceのgetConnection - パラメーター:
username- 接続ごとのユーザー名password- 接続ごとのパスワード- 戻り値:
- 遅延接続ハンドル
- 例外:
SQLExceptionSE- 関連事項: