La versione Spring-Boot-2.0.0-M1 cambia il pool di connessione database predefinito da tomcat jdbc pool a hikari, e quando si esegue l'applicazione spring boot, la console produce quanto segue
2021-11-25 14:48:09.429 INFO 22236 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Inizio... 2021-11-25 14:48:09.813 INFO 22236 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Inizio completato. I valori predefiniti per la configurazione predefinita di Hikari sono i seguenti:
{"connection-timeout":30000,"maximum-pool-size":10,"max-lifetime":180000,"minimum-idle":10,"validation-timeout":5000,"idle-timeout":60000}
| nome | Impostazioni predefinite del costruttore | La configurazione predefinita è il valore dopo la validazione | validatereset | | minInattività | -1 | 10 | minIdle<0 o minIdle>maxPoolSize, viene reimpostato a maxPoolSize | | maxPoolSize | -1 | 10 | Se maxPoolSize è inferiore a 1, viene resettato. Quando minIdle<=0 viene resettato a DEFAULT_POOL_SIZE, è 10; Se minIdle>0, si resetta al valore di minIdle | | maxLifetime | MINUTES.toMillis(30) = 1800000 | 1800000 | Se non è uguale a 0 e meno di 30 secondi, verrà resettata a 30 minuti | | connessione Tempo di uscita | SECONDS.toMillis(30) = 30000 | 30000 | Se è inferiore a 250 ms, viene resettato a 30 secondi | | validationTimeout | SECONDS.toMillis(5) = 5000 | 5000 | Se è inferiore a 250 ms, viene resettata a 5 secondi | | loginTimeout | 10 | 30 | Math.max(1, (int) MILLISECONDI.aSecondi(500L + connessione Tempo di scorta)), che è il massimo di connessione Tempo di scorta+500ms per convertire il numero di secondi in tutto e 1 | | idleTimeout | MINUTES.toMillis(10) = 600000 | 600000 | Se inattivitàTimeout+1 secondo > maxLifetime e maxLifetime >0, verrà resettato a 0; Se IdleTimeout!=0 e meno di 10 secondi, viene azzerato a 10 secondi | | Soglia di rilevamento delle perdite | 0 | 0 | Se è superiore a 0 e non è un test unitario, si valuta inoltre che (leakDetectionThreshold < SECONDS.toMillis(2) o (leakDetectionThreshold > maxLifetime & & maxLifetime > 0) verranno resettati a 0. Cioè, se deve entrare in vigore, deve essere >0, non può essere inferiore a 2 secondi, e quando maxLifetime > 0 ore non può essere superiore al maxLifetime | | inizializzazioneFailTimeout | 1 | 1 | - | | isAutoCommit | true | true | - | | isReadOnly | false | Fasle | - | | isAlpermettiSospensione | false | false | - | | isIsolateInternalQueries | false | false | - | | isRegisterMbeans | false | false | - | | sigillato | false | true | Questo flag è vero dopo l'inizio della corsa, indicando che la modifica non è più in esecuzione | | Nome pool | nullo | HikariPool-1 | - | | catalogo | nullo | nullo | - | | connectionInitSQL | nullo | nullo | - | | connectionTestQuery | nullo | nullo | - | | dataFonteNomeClasse | nullo | nullo | - | | schema | nullo | nullo | - | | transactionIsolationName | nullo | nullo | - | | dataSource | nullo | nullo | - | | dataProprietàSorgente | {} | {} | - | | threadFactory | nullo | nullo | - | | Esecutore programmato | nullo | nullo | - | | metricsTrackerFactory | nullo | nullo | - | | metricRegistry | nullo | nullo | - | | HealthCheckRegistry | nullo | nullo | - | | HealthCheckProperties | {} | {} | - |
Durante l'esecuzione di un test di stress, l'applicazione può segnalare i seguenti errori:
Causato da: org.springframework.jdbc.CannotGetJdbcConnectionException: Non è riuscito a ottenere JDBC Connection; eccezione annidata è java.sql.SQLTransientConnectionException: HikariPool-1 - La connessione non è disponibile, richiesta con tempi di scadenza dopo 30000ms. at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:82) su org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:80) su org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:67) su org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:337) su 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) su org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156) at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:109) su com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:81) at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:62) su com.sun.proxy.$Proxy 224.query(Fonte sconosciuta) su org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:151) ... Altri 114 Causato da: java.sql.SQLTransientConnectionException: HikariPool-1 - La connessione non è disponibile, la richiesta è stata scaduta dopo 30000ms. su com.zaxxer.hikari.pool.HikariPool.createTimeoutException(HikariPool.java:695) su com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:197) su com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:162) su 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) ... Altri 126
Errore:Non è riuscito a ottenere la connessione JDBC; eccezione annidata è java.sql.SQLTransientConnectionException: HikariPool-1 - La connessione non è disponibile, la richiesta è in scadenza dopo 30000ms.
Il Controller invia il codice dell'interfaccia di configurazione HikariDataSource come segue:
Ottimizzare lo schema, aumentare il numero massimo di thread e aumentare il numero di connessioni inattive, e modificare la configurazione application.yml come segue:
(Fine)
|