Версия Spring-Boot-2.0.0-M1 меняет пул подключения к базе данных по умолчанию с tomcat jdbc pool на hikari, и при запуске spring boot консоль выводит следующее
2021-11-25 14:48:09.429 INFO 22236 --- [основной] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Начало... 2021-11-25 14:48:09.813 ИНФОРМАЦИЯ 22236 --- [основная] 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 часов не может быть больше максимального срока службы | | initializationFailTimeout | 1 | 1 | - | | isAutoCommit | true | true | - | | isReadOnly | false | fasle | - | | isAllowPoolSuspension | false | false | - | | isIsolateInternalQueries | false | false | - | | isRegisterMbeans | false | false | - | | запечатанный | false | true | Этот флаг актуален после запуска запуска, указывая на то, что модификация больше не выполняется | | poolName | недействительный | HikariPool-1 | - | | каталог | недействительный | недействительный | - | | connectionInitSql | недействительный | недействительный | - | | connectionTestQuery | недействительный | недействительный | - | | dataSourceClassName | недействительный | недействительный | - | | схема | недействительный | недействительный | - | | transactionIsolationName | недействительный | недействительный | - | | dataSource | недействительный | недействительный | - | | dataSourceProperties | {} | {} | - | | 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(Источник неизвестен) at 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 следующим образом:
(Конец)
|