架构师_程序员_码农网

N Odzyskaj hasło
Zarejestruj się

QQ登录

Wystarczy jeden krok, aby rozpocząć

Wyszukiwanie
Wyświetl:4942|Odpowiedź: 1
打印 上一主题 下一主题

[ Archiwum]Spring Boot Database Connection Pool Optymalizacja HikariPool

[ Kopiuj link]
P 跳转到指定楼层
właściciel
发表于 2021-11-25 14:55:15|只看该作者回帖奖励 | Odwróćprzeglądanie|Tryb odczytu
Wersja Spring-Boot-2.0.0-M1 zmieniła domyślną pulę połączeń bazy danych z puli jdbc tomcat na hikari, podczas uruchamiania aplikacji Spring Boot konsola wyświetli następujące informacje:
2021-11-25 14:48:09.429 INFO 22236 --- [ main] com.zaxxer.hikari. HikariDataSource : HikariPool-1 - Uruchamianie...
2021-11-25 14:48:09.813 INFO 22236 --- [ main] com.zaxxer.hikari. HikariDataSource : HikariPool-1 - Uruchamianie zakończone.

Wartości domyślne dla domyślnej konfiguracji Hikari są następujące:
{"connection-timeout":30000, "maximum-pool-size":10, "max-lifetime":1800000, "minimum-idle". 10, "validation-timeout":5000, "idle-timeout":600000}.

name Wartości domyślne konstruktora Wartość domyślna po walidacji. Reset walidacji
minIdle -1 10 minIdle<0 lub minIdle>maxPoolSize jest resetowane do maxPoolSize.
maxPoolSize maxPoolSize -1 10 Jeśli maxPoolSize jest mniejszy niż 1, jest resetowany. Gdy minIdle<=0 jest resetowany do DEFAULT_POOL_SIZE, czyli 10; jeśli minIdle>0 jest resetowany do wartości minIdle.
maxLifetime MINUTES.toMillis(30) = 1800000 1800000 Jeśli nie jest równy 0 i jest krótszy niż 30 sekund, zostanie zresetowany do 30 minut.
connectionTimeout SECONDS.toMillis(30) = 30000 30000 Jeśli mniej niż 250 milisekund, reset z powrotem do 30 sekund
validationTimeout SECONDS.toMillis(5) = 5000 5000 Jeśli mniej niż 250 milisekund, jest resetowany z powrotem do 5 sekund
loginTimeout 10 30 Math.max(1, (int) MILLISECONDS.toSeconds(500L + connectionTimeout)), zaokrągla w górę do najbliższej sekundy dla connectionTimeout + 500ms i 1 dla 1
idleTimeout MINUTES.toMillis(10) = 600000 600000 Jeśli idleTimeout+1sec > maxLifetime i maxLifetime > 0, zostanie zresetowany do 0. Jeśli idleTimeout!=0 i mniej niż 10sec, zostanie zresetowany do 10sec.
leakDetectionThreshold 0 0 Jeśli większa niż 0 i nie jest testem jednostkowym, dalsza ocena: (leakDetectionThreshold < SECONDS.toMillis(2) lub (leakDetectionThreshold > maxLifetime && maxLifetime &gt ; 0), zostanie zresetowany do 0 . Tzn. aby zadziałał, musi wynosić > 0 i nie może być mniejszy niż 2 sekundy oraz nie może być większy niż maxLifetime, gdy maxLifetime > 0.
initialisationFailTimeout 1 1 -isAutoCommit
isAutoCommit initialisationFailTimeout isAutoCommit -isReadOnly
isReadOnly true - isReadOnly fasle -isAllowPoolSuspension
isAllowPoolSuspension fasle - isAllowPoolSuspension false fasle - isAllowPoolSuspension false false
isIsolateInternalQueries false - isIsolateInternalQueries false -isRegisterMbeans
isRegisterMbeans false false -false
zapieczętowany false true Ta flaga ma wartość true, gdy uruchomienie jest rozpoczęte i nie są już uruchamiane żadne modyfikacje.
poolName null HikariPool-1 HikariPool-1
catalog null null HikariPool-1 - katalog null null
connectionInitSql null null -null
connectionTestQuery null null connectionTestQuery null null -
dataSourceClassName null null -null
schema null null -null
transactionIsolationName null null -transactionIsolationName null
transactionIsolationName null - dataSource null -dataSource null null
dataSourceProperties {} {} null - dataSourceProperties {} {}
threadFactory null null threadFactory null null -
scheduledExecutor null null -metricsTrackerFactory
metricsTrackerFactory null null null - metricsTrackerFactory
metricRegistry null null null - metricRegistry
healthCheckRegistry null null -healthCheckRegistry null
healthCheckProperties {HealthCheckRegistry null null - healthCheckProperties} {} null - healthCheckProperties {} {}

Podczas wykonywania testów ciśnieniowych aplikacja może zgłosić następujący błąd:

Caused by: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql. SQLTransientConnectionException: HikariPool-1 - Połączenie nie jest dostępne, żądanie przekroczyło limit czasu po 30000 ms.
at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:82)
at org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:80)
at org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:67)
at org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:337)
at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:86)
at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:62)
at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:325)
at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156)
at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:109)
at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java. 81)
at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:62)
at com.sun.proxy.$Proxy224.query(Unknown Source)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:151)
... 114 więcej
Spowodowane przez: java.sql.SQLTransientConnectionException: HikariPool-1 - Połączenie nie jest dostępne, żądanie przekroczyło limit czasu po 30000ms.
at com.zaxxer.hikari.pool.HikariPool.createTimeoutException(HikariPool.java:695)
at com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:197)
at com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:162)
at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:128)
at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:158)
at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:116)
at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:79)
... 126 więcej


Błąd: Nie udało się uzyskać połączenia JDBC; zagnieżdżony wyjątek to java.sql.SQLTransientConnectionException: HikariPool-1 - Połączenie nie jest dostępne, żądanie przekroczyło limit czasu po 30000 ms .żądanie zakończyło się po 30000 ms.

Kontroler wyprowadza kod interfejsu konfiguracji HikariDataSource w następujący sposób:

Aby zoptymalizować rozwiązanie, zwiększyć maksymalną liczbę wątków i zwiększyć liczbę połączeń utrzymywanych w stanie bezczynności, zmodyfikuj konfigurację application.yml w następujący sposób:

(Koniec)




Poprzedni artykuł: Rozróżnienie POI getLastRowNum() i getLastCellNum()
Następny artykuł: [Raport]Porównanie narzędzi testowych LoadRunner i Jmeter
Kod Farmera, publikowany tylko w procesie praktyki, napotkał trudności techniczne, nie wprowadzaj innych w błąd.
sofa
发表于 2022-12-14 21:46:53|只看该作者
Nie jestem pewien, czy będę w stanie to zrobić.
Kod sieci rolników, opublikowany tylko w trakcie praktyki, napotkał trudności techniczne, nie wprowadzaj innych w błąd.
Musisz się zalogować zanim będziesz mógł pisać ponownie Zaloguj się | Zarejestruj się

T a wersja integralnych zasad


ZASTRZEŻENIE: Wszelkie oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer są przeznaczone wyłącznie do celów edukacyjnych i badawczych; powyższe treści nie mogą być wykorzystywane do celów komercyjnych lub nielegalnych, w przeciwnym razie wszelkie konsekwencje będą ponoszone przez samych użytkowników. Ta strona zawiera informacje z sieci, spór o prawa autorskie nie ma nic wspólnego z tą stroną. Należy całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli podoba Ci się program, prosimy o wsparcie oryginalnego oprogramowania, kup rejestrację i uzyskaj lepszą oryginalną usługę. W przypadku jakichkolwiek naruszeń, prosimy o kontakt mailowy w celu ich rozwiązania.

Mail To:help@itsvse.com

QQ| ( 鲁ICP备14021824号-2)|Sitemap

GMT+8, 2024-9-19 03:36

Szybka odpowiedźPowrótdo góryPowrót do listy