org.springframework.jdbc.datasource.LazyConnectionDataSourceProxy
こんな DB アクセスにお悩みのあなた!
211 Query SET autocommit=0 211 Query commit 211 Query SET autocommit=1 211 Query SET autocommit=0 211 Query commit 211 Query SET autocommit=1 211 Query SET autocommit=0 211 Query commit 211 Query SET autocommit=1 211 Query SET autocommit=0 211 Query commit 211 Query SET autocommit=1 211 Query SET autocommit=0 211 Query commit 211 Query SET autocommit=1 211 Query SET autocommit=0 211 Query commit 211 Query SET autocommit=1 211 Query SET autocommit=0 211 Query commit 211 Query SET autocommit=1 211 Query SET autocommit=0 211 Query commit 211 Query SET autocommit=1 211 Query SET autocommit=0 211 Query commit 211 Query SET autocommit=1 211 Query SET autocommit=0 211 Query commit 211 Query SET autocommit=1 211 Query SET autocommit=0 211 Query commit 211 Query SET autocommit=1 211 Query SET autocommit=0 211 Query commit
おやおや、DB アクセスの必要がないのに、見事に begin と commit が投げられまくっていますねー。
本日は、そんなあなたにオススメの商品の紹介です。
その名も、、、org.springframework.jdbc.datasource.LazyConnectionDataSourceProxy!!!
トランザクションには入ってみたものの、結局DBアクセスをしなかったり、キャッシュがヒットして DB アクセスが必要なかった場合などに効果的です。OpenEntityManagerInViewFilter との相性も抜群です。
使い方は簡単!
コネクションの取得を lazy にしたいデータソースを LazyConnectionDataSourceProxy でラップするだけ。
<!-- Actual DataSource --> <bean id="rawDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/test" /> <property name="username" value="root" /> <property name="password" value="" /> </bean> <!-- LazyConnectionDataSourceProxy --> <bean id="dataSource" class="org.springframework.jdbc.datasource.LazyConnectionDataSourceProxy"> <property name="targetDataSource" ref="rawDataSource"/> </bean>
これだけの設定で、実際に Statement が作成されるまでは、Connection が張られなくなります。
秘密は、Proxy。
LazyConnectionDataSourceProxy を使うと、最初に Statement を作成するまで、本物の JDBC Connection を取得しません。LazyConnectionDataSourceProxy からコネクションを取得しようとすると、proxy が返されることで実現されています。
ネイティブの JDBC Connection にキャストできないんじゃない?
なんて思っているあなた、心配ご無用です。そんなときのために、NativeJdbcExtractor と、そのサブクラスもセットでお付けします。
これで、Connection の proxy から、ネイティブなコネクションを取ることができます。
さぁ、お好きな Extractor を使って、楽しい DB アクセスライフを let's enjoy!
何なんだ、このノリは o...rz