Versiunea Spring-Boot-2.0.0-M1 schimbă pool-ul implicit de conexiuni la baza de date de la pool-ul jdbc tomcat la hikari, iar când rulează aplicația spring boot, consola afișează următoarele
2021-11-25 14:48:09.429 INFO 22236 --- [ principal] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Începe... 2021-11-25 14:48:09.813 INFO 22236 --- [ principal] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start finalizat. Valorile implicite pentru configurația implicită a lui Hikari sunt următoarele:
{"Conexiune-timeout":30000,"maximum-pool-size":10,"max-lifetime":180000,"minimum-idle":10,"validation-timeout":5000,"idle-timeout":60000}
| nume | Setările implicite ale constructorului | Configurația implicită este valoarea după validare | validatereset | | minune Inactiv | -1 | 10 | minIdle<0 sau minIdle>maxPoolSize, se resetează la maxPoolSize | | maxPoolSize | -1 | 10 | Dacă maxPoolSize este mai mic de 1, se resetează. Când minIdle<=0 este resetat la DEFAULT_POOL_SIZE, este 10; Dacă minIdle>0, se resetează la valoarea minIdle | | maxLifetime | MINUTES.toMillis(30) = 1800000 | 1800000 | Dacă nu este egal cu 0 și este mai mic de 30 de secunde, va fi resetat la 30 de minute | | conexiuneTimeout | SECONDS.toMillis(30) = 30000 | 30000 | Dacă este sub 250 ms, se resetează la 30 de secunde | | validareTimeout | SECONDS.toMillis(5) = 5000 | 5000 | Dacă este sub 250 ms, se resetează la 5 secunde | | loginTimeout | 10 | 30 | Math.max(1, (int) MILISECUNDE.laSecunde(500L + conexiuneTimpExpirare)), care este maximul de conexiuneTimpExpirare+500ms pentru a converti numărul de secunde la întreg și 1 | | idleTimeout | MINUTES.toMillis(10) = 600000 | 600000 | Dacă reactiv Expirare+1 secundă > maximLifetime și maxLifetime >0, va fi resetat la 0; Dacă idleTimeout!=0 și mai puțin de 10 secunde, se resetează la 10 secunde | | Prag de detectare a scurgerilor | 0 | 0 | Dacă este mai mare de 0 și nu este un test unitar, se judecă de asemenea că (leakDetectionThreshold < SECONDS.toMillis(2) sau (leakDetectionThreshold > maxLifetime & & maxLifetime > 0) vor fi resetate la 0. Adică, dacă va intra în vigoare, trebuie să fie >0 și nu poate fi mai puțin de 2 secunde, iar când maximLifetime > 0 ore nu poate fi mai mare decât maxViața | | inițializareFailTimeout | 1 | 1 | - | | isAutoCommit | true | true | - | | isReadOnly | false | Fasle | - | | isAllowPoolSuspension | false | false | - | | isIsolateInternalQueries | false | false | - | | isRegisterMbeans | false | false | - | | Sigilate | false | true | Acest steag este adevărat după ce alergarea începe, indicând că modificarea nu mai rulează | | Nume piscina | zero | HikariPool-1 | - | | catalog | zero | zero | - | | connectionInitSql | zero | zero | - | | connectionTestQuery | zero | zero | - | | dataSourceClassName | zero | zero | - | | Schemă | zero | zero | - | | TransactionIsolationName | zero | zero | - | | dataSource | zero | zero | - | | dataSursăProprietăți | {} | {} | - | | ThreadFactory | zero | zero | - | | Executor programat | zero | zero | - | | metricsTrackerFactory | zero | zero | - | | metricRegistry | zero | zero | - | | HealthCheckRegistry | zero | zero | - | | ProprietățiHealthCheckT | {} | {} | - |
La efectuarea unui test de stres, aplicația poate raporta următoarele erori:
Cauzat de: org.springframework.jdbc.CannotGetJdbcConnectionException: Nu s-a reușit să obțină JDBC Connection; excepția imbricată este java.sql.SQLTransientConnectionException: HikariPool-1 - Conexiunea nu este disponibilă, cererea expiră după 30000ms. at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:82) la org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:80) la org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:67) la org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:337) la org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:86) la org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:62) at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:325) la org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156) la org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:109) la com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:81) la org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:62) la com.sun.proxy.$Proxy 224.query(Sursă necunoscută) la org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:151) ... Încă 114 Cauzat de: java.sql.SQLTransientConnectionException: HikariPool-1 - Conexiunea nu este disponibilă, cererea expiră după 30000ms. la com.zaxxer.hikari.pool.HikariPool.createTimeoutException(HikariPool.java:695) la com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:197) la com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:162) la 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) ... Încă 126
Greșeală:Nu a reușit să obțină conexiunea JDBC; excepția imbricată este java.sql.SQLTransientConnectionException: HikariPool-1 - Conexiunea nu este disponibilă, cererea expiră după 30000ms.
Controlerul furnizează codul interfeței de configurare HikariDataSource astfel:
Optimizați schema, creșteți numărul maxim de fire și numărul de conexiuni ținute inactive și modificați configurația application.yml după cum urmează:
(Sfârșit)
|