2016-07-30 21 views
13

Używam Spring Boot w mojej aplikacji internetowej i używam Spring-jpa do odczytu/zapisu z/do mojej bazy danych. Działa bardzo dobrze, ale chcę zrozumieć, jak zarządzać połączeniami z bazą danych. Poniżej moja konfiguracja właściwości dla bazy danych:Jak zarządzać pulą połączeń z bazą danych na wiosnę 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 

mam ustawić maksymalną liczbę połączeń do 500. Gdy użytkownik wysyła żądanie na mojej aplikacji wiosny, połączenie z bazą danych zostaną otwarte dla niego. Po zakończeniu prośby, czy jpa zamknie to połączenie? Jeśli nie, to kiedy zamknie nieużywane połączenia?

Przeczytałem dokument referencyjny wiosny jpa z http://docs.spring.io/spring-data/jpa/docs/current/reference/html/. Ale nic nie wspomina o połączeniach.

Odpowiedz

8

Podczas korzystania z łączenia połączeń DB, połączenie z sqlconnection.close() niekoniecznie spowoduje zamknięcie połączenia wagi ciężkiej z bazą danych, zamiast tego najczęściej po prostu zwalnia połączenie jako możliwe do ponownego użycia w puli. Dlatego zaleca się wywołanie close() przy połączeniu tak szybko, jak to możliwe, gdy wykorzystuje się pulę połączeń po stronie klienta.

W konfiguracji, pula będzie zawierać maksymalną liczbę 500 połączeń (również byłoby dobrze, aby skonfigurować maxIdle, minIdle i minEvictableIdleTimeMillis dostroić liczbę połączeń gotowy do użycia i jak często je zwolnić, gdy nieużywany).

Niektóre bardziej doc here

+0

Problem polega na tym, że używam konwencji nazw repozytoriów jpa do odczytu/zapisu bazy danych. Jak mogę uzyskać instancję sqlconnection? –

8

Już okazało się, że można skonfigurować to od application.properties można znaleźć wszystkie możliwe właściwości here.

Zauważ, że od Spring Boot 1.4 są właściwości źródła danych dla każdego producenta źródła danych, z którym wiosna jest zintegrowana, po wyjęciu z pudełka. Jest spring.datasource.dbcp.*, spring.datasource.tomcat.* i tak dalej. Jeśli nie masz wystarczającej wydajności i potrzebujesz czegoś bardzo konkretnego, możesz zadeklarować komponent źródła danych samodzielnie. Oto przykład z źródłem danych 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

gdzie mogę znaleźć wszystkie wyjaśnienia dotyczące tych właściwości? Znalazłem tylko deklarację, ale nie wyjaśniłem szczegółów. –

+1

Musisz zagłębić się w API https://tomcat.apache.org/tomcat-7.0-doc/api/org/apache/tomcat/jdbc/pool/DataSource.html –

Powiązane problemy