Wersja Spring-Boot-2.0.0-M1 zmienia domyślną pulę połączeń bazy danych z puli tomcat jdbc na hikari, a podczas uruchamiania aplikacji spring boot konsola generuje następujące wyniki
2021-11-25 14:48:09.429 INFO 22236 --- [ główny] com.zaxxer.hikari.HikariDataŹródło: HikariPool-1 - Start... 2021-11-25 14:48:09.813 INFO 22236 --- [ main] com.zaxxer.hikari.HikariDataŹródło: HikariPool-1 - Start zakończony. Domyślne wartości domyślnej konfiguracji Hikari są następujące:
{"Limit-Połączenia":30000,"Maksymalny-Rozmiar-Puli-Wielkość":10,"Maksymalny czas życia":180000,"Minimalny czas bezczynności":10,"Limit-walidacji":5000,"Przerwa bezczynności":600000}
| nazwa | Domyślne ustawienia konstruktora | Domyślna konfiguracja to wartość po walidacji | validatereset | | minIdle | -1 | 10 | minIdle<0 lub minIdle>maxPoolSize, jest resetowany do maxPoolSize | | maxPoolSize | -1 | 10 | Jeśli maxPoolSize jest mniejszy niż 1, jest resetowany. Gdy minIdle<=0 zostanie zresetowane do DEFAULT_POOL_SIZE, wynosi 10; Jeśli minIdle>0, resetuje się do wartości minIdle | | maxLifetime | MINUTES.toMillis(30) = 1800000 | 1800000 | Jeśli nie jest równy 0 i trwa mniej niż 30 sekund, zostaje zresetowany do 30 minut | | łącznośćTimeout | SECONDS.toMillis(30) = 30000 | 30000 | Jeśli jest mniej niż 250 ms, jest resetowany do 30 sekund | | WalidacjaTimeout | SECONDS.toMillis(5) = 5000 | 5000 | Jeśli jest mniej niż 250 ms, jest resetowany do 5 sekund | | loginTimeout | 10 | 30 | Math.max(1, (int) MILLISECONDS.toSeconds(500L + connectionTimeout)), co jest maksymalną liczbą łącznościTimeout+500ms do przeliczenia liczby sekund na całość i 1 | | idleTimeout | MINUTES.toMillis(10) = 600000 | 600000 | Jeśli idleTimeout+1 sekunda > maxLifetime i maxLifetime >0, zostanie zresetowany do 0; Jeśli idleTimeout!=0 i mniej niż 10 sekund, resetuje się do 10 sekund | | leakDetectionThreshold | 0 | 0 | Jeśli jest większa niż 0 i nie jest testem jednostkowym, dodatkowo ocenia się, że (leakDetectionThreshold < SECONDS.toMillis(2) lub (leakDetectionThreshold > maxLifetime & maxLifetime > 0) zostanie zresetowane do 0. To znaczy, jeśli ma zadziałać, musi być >0 i nie może być krótsza niż 2 sekundy, a gdy maxLifetime > 0 godzin nie może być większe niż maxLifetime | | InicjalizacjaCzas Awarii | 1 | 1 | - | | isAutoCommit | true | true | - | | isReadOnly | false | Fasle | - | | isAllowPoolSuspension | false | false | - | | isIsolateInternalQueries | false | false | - | | isRegisterMbeans | false | false | - | | Zamknięte | false | true | Ta flaga jest prawdziwa po rozpoczęciu przebiegu, co oznacza, że modyfikacja już nie jest aktywna | | poolNazwa | zero | HikariPool-1 | - | | katalog | zero | zero | - | | connectionInitSql | zero | zero | - | | connectionTestQuery | zero | zero | - | | dataSourceClassName | zero | zero | - | | schemat | zero | zero | - | | transactionIsolationName | zero | zero | - | | dataSource | zero | zero | - | | dataSourceProperties | {} | {} | - | | threadFactory | zero | zero | - | | planowanyWykonawca | zero | zero | - | | metricsTrackerFactory | zero | zero | - | | metricRegistry | zero | zero | - | | healthCheckRegistry | zero | zero | - | | healthCheckProperties | {} | {} | - |
Podczas przeprowadzania testu obciążeniowego aplikacja może zgłaszać następujące błędy:
Spowodowane przez: org.springframework.jdbc.CannotGetJdbcConnectionException: 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 wygasło po 30000ms. at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:82) na org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:80) na org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:67) pod adresem 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) na org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156) na org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:109) at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:81) na org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:62) na com.sun.proxy.$Proxy 224.query(Nieznane Źródło) at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:151) ... Jeszcze 114 Spowodowane przez: java.sql.SQLTransientConnectionException: HikariPool-1 - Połączenie niedostępne, żądanie wygasło po 30000ms. na stronie com.zaxxer.hikari.pool.HikariPool.createTimeoutException(HikariPool.java:695) pod adresem com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:197) pod adresem 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) ... Jeszcze 126
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 zakończone po 30000 ms.
Kontroler generuje kod interfejsu konfiguracyjnego HikariDataSource w następujący sposób:
Zoptymalizuj schemat, zwiększ maksymalną liczbę wątków i zwiększ liczbę połączeń bezczynnych, a konfigurację application.yml zmodyfikuj w następujący sposób:
(Koniec)
|