Spring-Boot to całkiem niesamowite narzędzie, ale dokumentacja jest nieco skąpa, jeśli chodzi o bardziej zaawansowaną konfigurację. Jak ustawić właściwości, takie jak maksymalny rozmiar puli połączeń z bazą danych?
Wiosna-Boot podpory tomcat-jdbc
, HikariCP
a Commons DBCP
natywnie są one skonfigurowane w ten sam sposób?
-Dspring.datasource.tomcat.initial-size=10
(domyślnie 10)Odpowiedzi:
Okazuje się, że ustawienie tych właściwości konfiguracyjnych jest dość proste, ale oficjalna dokumentacja jest bardziej ogólna, więc może być trudna do znalezienia podczas wyszukiwania informacji o konfiguracji puli połączeń.
Aby ustawić maksymalny rozmiar puli dla tomcat-jdbc, ustaw tę właściwość w pliku .properties lub .yml:
spring.datasource.maxActive=5
Jeśli wolisz, możesz również skorzystać z:
spring.datasource.max-active=5
W ten sposób możesz ustawić dowolną właściwość puli połączeń. Oto pełna lista właściwości obsługiwanych przez
tomcat-jdbc
.Aby ogólnie zrozumieć, jak to działa, musisz trochę zagłębić się w kod Spring-Boot.
Spring-Boot konstruuje źródło danych w następujący sposób ( zobacz tutaj , wiersz 102):
@ConfigurationProperties(prefix = DataSourceAutoConfiguration.CONFIGURATION_PREFIX) @Bean public DataSource dataSource() { DataSourceBuilder factory = DataSourceBuilder .create(this.properties.getClassLoader()) .driverClassName(this.properties.getDriverClassName()) .url(this.properties.getUrl()) .username(this.properties.getUsername()) .password(this.properties.getPassword()); return factory.build(); }
DataSourceBuilder jest odpowiedzialny za ustalenie, której biblioteki puli należy użyć, sprawdzając każdą z serii znanych klas w ścieżce klas. Następnie konstruuje DataSource i zwraca go do
dataSource()
funkcji.W tym momencie pojawia się magia
@ConfigurationProperties
. Ta adnotacja mówi Springowi, aby szukał właściwości z przedrostkiemCONFIGURATION_PREFIX
(którym jestspring.datasource
). Dla każdej właściwości, która zaczyna się od tego prefiksu, Spring spróbuje wywołać metodę ustawiającą w DataSource z tą właściwością.Tomcat DataSource jest rozszerzeniem DataSourceProxy , które ma tę metodę
setMaxActive()
.I w ten sposób twój
spring.datasource.maxActive=5
jest poprawnie stosowany!A co z innymi pulami połączeń
Nie próbowałem, ale jeśli używasz jednej z innych pul połączeń obsługiwanych przez Spring-Boot (obecnie HikariCP lub Commons DBCP), powinieneś być w stanie ustawić właściwości w ten sam sposób, ale musisz spojrzeć na projekt dokumentację, aby wiedzieć, co jest dostępne.
źródło
spring.datasource.tomcat.max-active
lubspring.datasource.hikari.maximum-pool-size
.spring.datasource.maxActive=1
działało tylko . Ta liniaspring.datasource.max-active=1
nie działa dla mnie. Wersja Spring Boot2.2.2.RELEASE
W aktualnej wersji Spring-Boot (1.4.1.RELEASE) każda implementacja buforowania źródła danych ma swój własny prefiks właściwości.
Na przykład, jeśli używasz tomcat-jdbc:
spring.datasource.tomcat.max-wait=10000
Możesz znaleźć wyjaśnienie tutaj
spring.datasource.max-wait=10000
to już nie ma wpływu.
źródło
W spring boot 2.x musisz odwołać się do właściwości konkretnego dostawcy.
https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-sql.html#boot-features-connect-to-production-database
Domyślnie hikari można ustawić za pomocą
spring.datasource.hikari.maximum-pool-size
.źródło
Różne pule połączeń mają różne konfiguracje.
Na przykład Tomcat (domyślnie) oczekuje:
a HikariCP będzie zadowolony z:
Możemy zaspokoić oba bez konfiguracji standardowej:
Brak właściwości do zdefiniowania dostawcy puli połączeń.
Spójrz na źródło DataSourceBuilder.java
... więc możemy łatwo zastąpić dostawcę puli połączeń za pomocą tej konfiguracji maven (pom.xml):
źródło
Na podstawie typu / rozmiaru / obciążenia / liczby aplikacji. użytkowników ... itd. - możesz śledzić swoje właściwości produkcyjne
spring.datasource.tomcat.initial-size=50 spring.datasource.tomcat.max-wait=20000 spring.datasource.tomcat.max-active=300 spring.datasource.tomcat.max-idle=150 spring.datasource.tomcat.min-idle=8 spring.datasource.tomcat.default-auto-commit=true
źródło
spring.datasource.tomcat.max-active=5
spring.datasource.tomcat.max-idle=5
mi wystarczyło, dzięki!