Версія Spring-Boot-2.0.0-M1 змінює стандартний пул підключення до бази даних з tomcat jdbc pool на hikari, і при запуску spring boot консоль виводить наступне
2021-11-25 14:48:09.429 ІНФО 22236 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Починаємо... 2021-11-25 14:48:09.813 ІНФО 22236 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Початок завершено. Значення за замовчуванням для стандартної конфігурації Hikari такі:
{"connection-timeout":30000,"maximum-pool-size":10,"max-life":1800000,"minimum-idle":10,"validation-timeout":5000,"idle-timeout":600000}
| Ім'я | Конструктори за замовчуванням | Стандартна конфігурація — це значення після валідації | validatereset | | minIdle | -1 | 10 | minIdle<0 або minIdle>maxPoolSize, скидається до maxPoolSize | | maxPoolSize | -1 | 10 | Якщо maxPoolSize менше 1, він скидається. Коли minIdle<=0 скидається до DEFAULT_POOL_SIZE, це 10; Якщо minIdle>0, він скидається до значення minIdle | | maxLifetime | MINUTES.toMillis(30) = 1800000 | 1800000 | Якщо він не дорівнює 0 і менше 30 секунд, його скидають до 30 хвилин | | з'єднанняТайм-аут | SECONDS.toMillis(30) = 30000 | 30000 | Якщо менше 250 мс, його скидають до 30 секунд | | validationTimeout | SECONDS.toMillis(5) = 5000 | 5000 | Якщо менше 250 мс, його скидають до 5 секунд | | loginTimeout | 10 | 30 | Math.max(1, (int) MILLISECONDS.toSeconds(500L + connectionTimeout)), що є максимальним часом з'єднанняTimeout + 500 мс для перетворення кількості секунд у цілу та 1 | | IdleTimeout | MINUTES.toMillis(10) = 600000 | 600000 | Якщо idleTimeout+1 секунда > maxLifetime і maxLifetime >0, він скидається до 0; Якщо idleTimeout!=0 і менше 10 секунд, скидається до 10 секунд | | leakDetectionThreshold | 0 | 0 | Якщо він перевищує 0 і не є модульним тестом, додатково оцінюється, що (leakDetectionThreshold < SECONDS.toMillis(2) або (leakDetectionThreshold > maxLifetime && maxLifetime > 0) буде скинуто до 0. Тобто, якщо він має набути чинності, він має бути >0, і не може бути менше 2 секунд, і коли maxLifetime > 0 годин не може бути більшим за maxLife. | | initializationFailTimeout | 1 | 1 | - | | isAutoCommit | true | true | - | | isReadOnly | false | fasle | - | | isAllowPoolSuspension | false | false | - | | isIsolateInternalQueries | false | false | - | | isRegisterMbeans | false | false | - | | Запечатаний | false | true | Цей прапорець діє після початку запуску, що означає, що модифікація більше не виконується | | poolНазва | нуль | HikariPool-1 | - | | каталог | нуль | нуль | - | | connectionInitSql | нуль | нуль | - | | connectionTestQuery | нуль | нуль | - | | dataSourceClassName | нуль | нуль | - | | Схеми | нуль | нуль | - | | transactionIsolationName | нуль | нуль | - | | dataSource | нуль | нуль | - | | dataSourceВластивості | {} | {} | - | | threadFactory | нуль | нуль | - | | scheduledВиконавець | нуль | нуль | - | | metricsTrackerFactory | нуль | нуль | - | | metricRegistry | нуль | нуль | - | | healthCheckRegistry | нуль | нуль | - | | healthCheckВластивості | {} | {} | - |
Під час проведення стрес-тесту додаток може повідомляти про такі помилки:
Причина: org.springframework.jdbc.CannotGetJdbcConnectionException: Не вдалося отримати JDBC Connection; Вкладений виняток — java.sql.SQLTransientConnectionException: HikariPool-1 — З'єднання недоступне, запит закінчується після 30000 мс. at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:82) на org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:80) на org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:67) at org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:337) на 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) на com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:81) на org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:62) за адресою com.sun.proxy.$Proxy 224.query(Невідоме джерело) на org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:151) ... Ще 114 Причина: java.sql.SQLTransientConnectionException: HikariPool-1 - З'єднання недоступне, запит закінчився після 30000 мс. на com.zaxxer.hikari.pool.HikariPool.createTimeoutException(HikariPool.java:695) на com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:197) на com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:162) за адресою 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
Помилка:Не вдалося отримати JDBC Connection; вкладений виняток — java.sql.SQLTransientConnectionException: HikariPool-1 — З'єднання недоступне, запит закінчується після 30000 мс.
Контролер виводить конфігураційний код інтерфейсу HikariDataSource наступним чином:
Оптимізуйте схему, збільште максимальну кількість потоків і кількість з'єднань, що залишаються без руху, а також змініть конфігурацію application.yml наступним чином:
(Кінець)
|