2016-07-30 15 views
13

Webアプリケーションでspring-bootを使用していて、spring-jpaを使用してデータベースからの読み取り/書き込みを行っています。それはうまくいきますが、データベース接続を管理する方法を理解したいと思います。ユーザーは自分の春のアプリケーションに要求を行うと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/からの春の参考資料を読んでいます。しかし、接続について何も言及していません。

答えて

8

DB接続プーリングを使用する場合、sqlconnection.close()を呼び出すと、データベースへのヘビーウェイト接続が閉じられるとは限りません。代わりに、ほとんどの場合、接続でプール内で再利用可能になるだけです。そのため、クライアント側の接続プールを利用するときは、できるだけ早く接続時にclose()を呼び出すことをお勧めします。

設定では、プールに最大500の接続が含まれます(maxIdleminIdle、およびminEvictableIdleTimeMillisを設定して、すぐに使用できる接続の数とそれらを解放する頻度を調整するとよいでしょう)使用されていない)。

いくつかのより多くのdoc here

+0

問題は私がjpaリポジトリ名の規約を使ってデータベースを読み書きすることです。 sqlconnectionのインスタンスを取得するにはどうすればよいですか? –

8

は、あなたはすでにあなたはあなたが可能なすべてのプロパティhereを見つけることができますapplication.properties からこれを設定することができることを見出しました。

SpringBoot1.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 ; 
} 
+0

これらのプロパティの説明はどこにありますか?私は宣言しか見つけられませんでしたが、詳細は説明しません。 –

+1

APIを入手する必要がありますhttps://tomcat.apache.org/tomcat-7.0-doc/api/org/apache/tomcat/jdbc/pool/DataSource.html –

関連する問題