クラス LazyConnectionDataSourceProxy

java.lang.ObjectSE
org.springframework.jdbc.datasource.DelegatingDataSource
org.springframework.jdbc.datasource.LazyConnectionDataSourceProxy
実装されたすべてのインターフェース:
WrapperSECommonDataSourceSEDataSourceSEInitializingBean

public class LazyConnectionDataSourceProxy extends DelegatingDataSource
ターゲット DataSource のプロキシ。実際の JDBC 接続を遅延フェッチします。つまり、最初にステートメントが作成されるまでフェッチしません。自動コミットモード、トランザクション分離、読み取り専用モードなどの接続初期化プロパティは保持され、実際の接続がフェッチされるとすぐに (フェッチされた場合)、実際の JDBC 接続に適用されます。ステートメントが作成されていない場合、コミットおよびロールバックの呼び出しは無視されます。6.1.2 では、通常のターゲット DataSource に加えて、読み取り専用トランザクション中に使用する read-only DataSource の特別なサポートもあります。

この DataSource プロキシを使用すると、実際に必要でない限り、プールから JDBC 接続をフェッチすることを回避できます。JDBC トランザクション制御は、プールから接続を取得したり、データベースと通信したりせずに実行できます。これは、JDBC ステートメントの最初の作成時に遅延して実行されます。ボーナスとして、これにより、ルーティング DataSource (例: IsolationLevelDataSourceRouter ) でトランザクション同期読み取り専用フラグや分離レベルを考慮することが可能になります。

LazyConnectionDataSourceProxy と TransactionAwareDataSourceProxy の両方を構成する場合は、後者が最も外側の DataSource であることを確認してください。このようなシナリオでは、データアクセスコードはトランザクション対応の DataSource と通信し、次に LazyConnectionDataSourceProxy と連携します。6.1.2 以降、LazyConnectionDataSourceProxy は最初の接続アクセス時にデフォルトの接続特性を初期化します。起動時にこれを強制するには、checkDefaultConnectionProperties() を呼び出します。

物理 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, Sam Brannen
関連事項:
  • コンストラクターの詳細

  • メソッドの詳細

    • setReadOnlyDataSource

      public void setReadOnlyDataSource(@Nullable DataSourceSE readOnlyDataSource)
      読み取り専用トランザクションに使用するターゲット DataSource のバリアントを指定します。

      利用可能な場合、このような読み取り専用 DataSource からの接続は、読み取り専用としてマークされている Spring 管理のトランザクション内で遅延取得されます。Connection.setReadOnly(boolean)SE フラグは変更されず、読み取り専用 DataSource のデフォルトとして事前設定されることが期待され、各トランザクションの開始時と終了時にフラグを切り替えるオーバーヘッドが回避されます。また、デフォルトの自動コミットおよび分離レベル設定は、プライマリターゲット DataSource のデフォルトの接続プロパティと一致することが期待されます。

      導入:
      6.1.2
      関連事項:
    • setDefaultAutoCommit

      public void setDefaultAutoCommit(boolean defaultAutoCommit)
      ターゲット接続がまだフェッチされていない場合(実際の JDBC 接続のデフォルトがまだ不明な場合)に公開するように、デフォルトの自動コミットモードを設定します。

      指定しない場合、デフォルトは接続の最初のアクセスを遅延チェックすることによって決定されます。

      関連事項:
    • setDefaultTransactionIsolationName

      public void setDefaultTransactionIsolationName(StringSE constantName)
      ConnectionSE の対応する定数の名前によってデフォルトのトランザクション分離レベルを設定します。たとえば、"TRANSACTION_SERIALIZABLE"
      パラメーター:
      constantName - 定数の名前
      関連事項:
    • setDefaultTransactionIsolation

      public void setDefaultTransactionIsolation(int defaultTransactionIsolation)
      ターゲット接続がまだフェッチされていない場合(実際の JDBC 接続のデフォルトがまだ不明な場合)に公開するデフォルトのトランザクション分離レベルを設定します。

      このプロパティは、ConnectionSE インターフェースで定義されている int 定数値 (例: 8) を受け入れます。これは主にプログラムでの使用を目的としています。値を名前で設定するには、"defaultTransactionIsolationName" プロパティの使用を検討してください (たとえば、"TRANSACTION_SERIALIZABLE")。

      指定しない場合、デフォルトは接続の最初のアクセスを遅延チェックすることによって決定されます。

      関連事項:
    • checkDefaultConnectionProperties

      public void checkDefaultConnectionProperties()
      可能であれば、ターゲット DataSource からの接続を介してデフォルトの自動コミットとトランザクション分離を決定します。
      導入:
      6.1.2
      関連事項:
    • checkDefaultConnectionProperties

      protected void checkDefaultConnectionProperties(ConnectionSE con) throws SQLExceptionSE
      デフォルトの接続プロパティ (自動コミット、トランザクション分離) を確認し、後でターゲット DataSource から実際の JDBC 接続をフェッチしなくても正しく公開できるように維持します。
      パラメーター:
      con - チェックに使用する接続
      例外:
      SQLExceptionSE - Connection メソッドによってスローされた場合
    • defaultAutoCommit

      @Nullable protected BooleanSE defaultAutoCommit()
      デフォルトの自動コミット値を公開します。
    • defaultTransactionIsolation

      @Nullable protected IntegerSE defaultTransactionIsolation()
      デフォルトのトランザクション分離値を公開します。
    • getConnection

      public ConnectionSE getConnection() throws SQLExceptionSE
      ステートメント(または PreparedStatement または CallableStatement)を要求されたときに実際の JDBC 接続を遅延フェッチする接続ハンドルを返します。

      返された Connection ハンドルは ConnectionProxy インターフェースを実装し、基になるターゲット Connection を取得できるようにします。

      次で指定:
      インターフェース DataSourceSEgetConnection 
      オーバーライド:
      クラス DelegatingDataSourcegetConnection 
      戻り値:
      遅延接続ハンドル
      例外:
      SQLExceptionSE
      関連事項:
    • getConnection

      public ConnectionSE getConnection(StringSE username, StringSE password) throws SQLExceptionSE
      ステートメント(または PreparedStatement または CallableStatement)を要求されたときに実際の JDBC 接続を遅延フェッチする接続ハンドルを返します。

      返された Connection ハンドルは ConnectionProxy インターフェースを実装し、基になるターゲット Connection を取得できるようにします。

      次で指定:
      インターフェース DataSourceSEgetConnectionSE 
      オーバーライド:
      クラス DelegatingDataSourcegetConnection 
      パラメーター:
      username - 接続ごとのユーザー名
      password - 接続ごとのパスワード
      戻り値:
      遅延接続ハンドル
      例外:
      SQLExceptionSE
      関連事項: