Webアプリケーションでspring-bootを使用し、spring-jpaを使用してデータベースの読み取り/書き込みを行っています。うまく機能しますが、データベース接続の管理方法を理解したいと思います。以下は、データベースのプロパティ設定です。
spring.datasource.url=jdbc:mysql://localhost:3306/test?characterEncoding=utf8
spring.datasource.username=user
spring.datasource.password=pwd
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.max-active=500
最大接続数を500に設定しました。ユーザーが私の春のアプリケーションで要求を行うと、データベース接続が彼のために開かれます。リクエストの完了後、JPAはこの接続を閉じますか?そうでない場合、未使用の接続はいつ閉じられますか?
http://docs.spring.io/spring-data/jpa/docs/current/reference/html/ からspring jpaリファレンスドキュメントを読みました。しかし、接続については何も言及していません。
DB接続プーリングを使用する場合、sqlconnection.close()
への呼び出しは、必ずしもデータベースへのヘビーウェイト接続を閉じるわけではなく、ほとんどの場合、プールで再利用可能な接続を解放するだけです。そのため、クライアント側の接続プールを利用する場合は、できるだけ早く接続時にclose()
を呼び出すことをお勧めします。
構成では、プールには最大500個の接続が含まれます(maxIdle
、minIdle
、およびminEvictableIdleTimeMillis
を構成して、準備完了の数を調整することもできます。使用する接続と、使用されていないときにそれらを解放する頻度)。
いくつかのドキュメント こちら
application.properties
からこれを設定できることがすでにわかっています。すべての可能なプロパティを見つけることができます here 。
Spring Boot 1.4からは、すぐに統合できるすべてのデータソースベンダーのデータソースプロパティがあります。 spring.datasource.dbcp.*
、spring.datasource.Tomcat.*
などがあります。 1.4 docs を参照してください
それだけでは不十分で、非常に具体的なものが必要な場合は、データソースBeanを自分で宣言できます。 Tomcatデータソースの例を次に示します。
@Bean
public DataSource dataSource(){
PoolProperties p = new PoolProperties();
p.setUrl("jdbc:mysql://localhost:3306/mysql");
p.setDriverClassName("com.mysql.jdbc.Driver");
p.setUsername("root");
p.setPassword("password");
p.setJmxEnabled(true);
p.setTestWhileIdle(false);
p.setTestOnBorrow(true);
p.setValidationQuery("SELECT 1");
p.setTestOnReturn(false);
p.setValidationInterval(30000);
p.setTimeBetweenEvictionRunsMillis(30000);
p.setMaxActive(100);
p.setInitialSize(10);
p.setMaxWait(10000);
p.setRemoveAbandonedTimeout(60);
p.setMinEvictableIdleTimeMillis(30000);
p.setMinIdle(10);
p.setLogAbandoned(true);
p.setRemoveAbandoned(true);
p.setJdbcInterceptors(
"org.Apache.Tomcat.jdbc.pool.interceptor.ConnectionState;"+
"org.Apache.Tomcat.jdbc.pool.interceptor.StatementFinalizer");
DataSource datasource = new DataSource();
datasource.setPoolProperties(p);
return datasource ;
}