簡體   English   中英

如何在spring jpa中管理數據庫連接池?

[英]How to manage database connection pool in spring jpa?

我在我的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.當用戶在我的spring應用程序上發出請求時,將為他打開數據庫連接。 完成請求后,春天jpa會關閉這個連接嗎? 如果沒有,它何時關閉未使用的連接?

我已經閱讀了http://docs.spring.io/spring-data/jpa/docs/current/reference/html/上的spring jpa參考文檔。 但它沒有提到關於連接的任何事情。

使用數據庫連接池時,對sqlconnection.close()的調用不一定會關閉與數據庫的重量級連接,而是通常只會將連接釋放為可在池中重復使用。 這就是為什么建議在利用客戶端連接池時盡快調用連接上的close()

在您的配置中,池將包含最多500個連接(配置maxIdleminIdleminEvictableIdleTimeMillis以調整即用型連接的數量以及在不使用時釋放它們的頻率也是很好的)。

這里還有一些文檔

您已經發現可以從application.properties配置它。您可以在此處找到所有可能的屬性。

請注意,從Spring Boot 1.4開始,每個數據源供應商都有數據源屬性,這些供應商可以開箱即用地集成。 spring.datasource.dbcp.*spring.datasource.tomcat.*等等。 請參閱1.4文檔

如果沒有,並且您需要非常具體的東西,您可以自己聲明數據源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 ;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM