Verze Spring-Boot-2.0.0-M1 mění výchozí databázový pool připojení z tomcat jdbc pool na hikari a při spuštění Spring Boot aplikace konzole vypíše následující
2021-11-25 14:48:09.429 INFO 22236 --- [ hlavní] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Začínám... 2021-11-25 14:48:09.813 INFO 22236 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start dokončen. Výchozí hodnoty pro výchozí konfiguraci Hikari jsou následující:
{"connection-timeout":30000,"maximum-pool-size":10,"max-lifetime":180000,"minimum-idle":10,"validation-timeout":5000,"idle-timeout":60000}
| Jméno | Výchozí stavby konstruktorů | Výchozí konfigurací je hodnota po validate | validatereset | | minIdle | -1 | 10 | minIdle<0 nebo minIdle>maxPoolSize, je resetován na maxPoolSize | | maxPoolSize | -1 | 10 | Pokud je maxPoolSize menší než 1, resetuje se. Když se minIdle<=0 resetuje na DEFAULT_POOL_SIZE, je to 10; Pokud minIdle>0, resetuje se na hodnotu minIdle | | maxLifetime | MINUTES.toMillis(30) = 1800000 | 1800000 | Pokud není rovna 0 a je méně než 30 sekund, vrátí se zpět na 30 minut | | Timeout připojení | SECONDS.toMillis(30) = 30000 | 30000 | Pokud je to méně než 250 ms, vrátí se zpět na 30 sekund | | validationTimeout | SECONDS.toMillis(5) = 5000 | 5000 | Pokud je to méně než 250 ms, vrátí se zpět na 5 sekund | | loginTimeout | 10 | 30 | Math.max(1, (int) MILLISECONDS.toSeconds(500L + connectionTimeout)), což je maximum connectionTimeout+500ms pro převod počtu sekund na celek a 1 | | idleTimeout | MINUTES.toMillis(10) = 600000 | 600000 | Pokud idleTimeout+1 sekunda > maxLifetime a maxLifetime >0, resetuje se na 0; Pokud idleTimeout!=0 a méně než 10 sekund, resetuje se na 10 sekund | | leakDetectionThreshold | 0 | 0 | Pokud je větší než 0 a není jednotkovým testem, dále se posuzuje, že (leakDetectionThreshold < SECONDS.toMillis(2) nebo (leakDetectionThreshold > maxLifetime & maxLifetime > 0) bude resetováno na 0. To znamená, že pokud má být účinný, musí být >0 a nesmí být kratší než 2 sekundy, a když maxLifetime > 0 hodin nemůže být větší než maxLifetime | | InicializaSelháníČasový limit | 1 | 1 | - | | isAutoCommit | true | true | - | | isReadOnly | false | Fasle | - | | je AllowPoolSuspension | false | false | - | | isIsolateInternalQueries | false | false | - | | isRegisterMbeans | false | false | - | | zapečetěný | false | true | Tento příznak je pravdivý po začátku běhu, což naznačuje, že úprava již neběží | | poolNázev | nula | HikariPool-1 | - | | katalog | nula | nula | - | | connectionInitSql | nula | nula | - | | connectionTestQuery | nula | nula | - | | dataSourceClassName | nula | nula | - | | schéma | nula | nula | - | | transactionIsolationName | nula | nula | - | | dataSource | nula | nula | - | | dataSourceProperties | {} | {} | - | | threadFactory | nula | nula | - | | plánovaný vykonavatel | nula | nula | - | | metricsTrackerFactory | nula | nula | - | | metricRegistry | nula | nula | - | | healthCheckRegistry | nula | nula | - | | healthCheckProperties | {} | {} | - |
Při provádění zátěžového testu může aplikace hlásit následující chyby:
Způsobeno: org.springframework.jdbc.CannotGetJdbcConnectionException: Nepodařilo se získat JDBC Connection; Vnořená výjimka je java.sql.SQLTransientConnectionException: HikariPool-1 - Připojení není dostupné, požadavek vypršel po 30000 ms. at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:82) na org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:80) at org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:67) na adrese 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(Neznámý zdroj) at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:151) ... Dalších 114 Způsobeno: java.sql.SQLTransientConnectionException: HikariPool-1 - Připojení není dostupné, požadavek vypršel po 30000 ms. na com.zaxxer.hikari.pool.HikariPool.createTimeoutException(HikariPool.java:695) na com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:197) na 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) ... Dalších 126
Chyba:Nepodařilo se získat spojení s JDBC; vnořená výjimka je java.sql.SQLTransientConnectionException: HikariPool-1 - Připojení není dostupné, požadavek vypršel po 30000 ms.
Řadič výstupem vydává konfigurační kód rozhraní HikariDataSource následovně:
Optimalizujte schéma, zvyšte maximální počet vláken a počet spojení držených v klidu a upravte application.yml konfiguraci následovně:
(Konec)
|