2016-07-30 30 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 

當用戶在我的Spring應用程序的請求,我都設置爲500的最大連接數,數據庫連接會爲他打開。請求完成後,將彈出jpa關閉此連接?如果沒有,什麼時候關閉未使用的連接?

我已閱讀來自http://docs.spring.io/spring-data/jpa/docs/current/reference/html/的spring jpa參考文檔。但它沒有提及任何有關連接的內容。

回答

8

當使用數據庫連接池時,對sqlconnection.close()的調用不一定會關閉到數據庫的重量級連接,而是通常會將連接釋放爲可在池中重新使用。這就是爲什麼在利用客戶端連接池時儘可能快地調用連接close()的原因。

在您的配置,池將包含500個連接的最大數目(這也將是不錯的配置maxIdleminIdle,並minEvictableIdleTimeMillis調整準備使用的連接的數量和頻率時放開它們不曾用過)。

一些更DOC here

+0

問題是我使用jpa存儲庫名稱約定來讀取/寫入數據庫。我怎樣才能得到sqlconnection實例? –

8

你已經發現,可以從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 ; 
} 
+0

我可以在哪裏找到所有這些屬性的解釋?我只找到了聲明,但沒有詳細解釋。 –

+1

你必須挖掘API https://tomcat.apache.org/tomcat-7.0-doc/api/org/apache/tomcat/jdbc/pool/DataSource.html –