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