Spring-Boot-2.0.0-M1 버전은 기본 데이터베이스 연결 풀을 tomcat jdbc 풀에서 hikari로 변경하며, spring boot 애플리케이션을 실행할 때 콘솔은 다음과 같은 출력을 냅니다
2021-11-25 14:48:09.429 정보 22236 --- [메인] com.zaxxer.hikari.Hikari데이터출처 : HikariPool-1 - 시작... 2021-11-25 14:48:09.813 정보 22236 --- [ 메인] com.zaxxer.hikari.hikari 데이터출처 : HikariPool-1 - 시작 완료. 히카리의 기본 구성에 대한 기본 값은 다음과 같습니다:
{"connection-timeout":30000,"maximum-pool-size":10,"max-lifetime":1800000,"minimum-idle":10,"validation-timeout":5000,"idle-timeout":600000}
| 이름 | 구성자 기본 설정 | 기본 구성은 검증 후 값입니다 | validatereset | | 미니들 | -1 | 10 | minIdle<0 또는 minIdle>maxPoolSize로 초기화되면 maxPoolSize로 초기화됩니다 | | maxPoolSize | -1 | 10 | maxPoolSize가 1 미만이면 초기화됩니다. minIdle<=0을 DEFAULT_POOL_SIZE으로 초기화하면 10이 됩니다; minIdle>0이면 minIdle 값으로 초기화됩니다 | | 맥스라이프타임 | MINUTES.toMillis(30) = 1800000 | 1800000 | 0이 아니고 30초 미만이면 30분으로 리셋됩니다 | | 연결타임아웃 | SECONDS.toMillis(30) = 30000 | 30000 | 250ms 미만이면 30초로 초기화됩니다 | | 검증Timeout | 초.투밀리스(5) = 5000 | 5000 | 250ms 미만이면 5초로 초기화됩니다 | | 로그인타임아웃 | 10 | 30 | Math.max(1, (int) MILLISECONDS.toSeconds(500L + connectionTimeout)), 이는 최대 연결타임아웃+500ms를 초 수를 전체 및 1로 변환하는 데 해당합니다. | | idleTimeout | MINUTES.toMillis(10) = 600000 | 600000 | 만약 대기 타임아웃+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시간은 maxLifetime보다 길어서는 안 됩니다 | | 초기화FailTimeout | 1 | 1 | - | | isAutoCommit | true | true | - | | isReadOnly | false | 파슬 | - | | isAllowPoolSuspension | false | false | - | | isIsolateInternalQueries | false | false | - | | isRegisterMbeans | false | false | - | | 밀봉 | false | true | 이 플래그는 실행 시작 후 발생하며, 수정이 더 이상 실행되지 않음을 나타냅니다 | | 풀네임 | 영 | 히카리풀-1 | - | | 카탈로그 | 영 | 영 | - | | connectionInitSQL | 영 | 영 | - | | connectionTestQuery | 영 | 영 | - | | dataSourceClassName | 영 | 영 | - | | 스키마 | 영 | 영 | - | | transactionIsolationName | 영 | 영 | - | | 데이터소스 | 영 | 영 | - | | dataSourceProperties | {} | {} | - | | 스레드팩토리 | 영 | 영 | - | | scheduledexecutor | 영 | 영 | - | | metricsTrackerFactory | 영 | 영 | - | | 메트릭레지스트리 | 영 | 영 | - | | 건강검사 등록부 | 영 | 영 | - | | healthCheckProperties(건강 점검 속성) | {} | {} | - |
스트레스 테스트를 수행할 때 애플리케이션은 다음과 같은 오류를 보고할 수 있습니다:
원인: org.springframework.jdbc.CannotGetJdbcConnectionException: JDBC 연결을 얻지 못함; 중첩 예외는 java.sql입니다. SQLTransientConnectionException: HikariPool-1 - 연결이 불가하며, 요청 타임아웃 후 30000ms. 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) org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:337) org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:86) org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:62) org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:325) org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156) 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 - 연결이 불가하며, 요청이 30,000ms 후 타임아웃됨. 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 커넥션 취득 실패; 중첩 예외는 java.sql.SQLTransientConnectionException: HikariPool-1 - 연결이 불가하며, 요청이 30000ms 후 시간 초과됩니다.
컨트롤러는 다음과 같이 HikariDataSource 구성 인터페이스 코드를 출력합니다:
방식을 최적화하고, 최대 스레드 수를 늘리고, 유휴 상태로 유지하는 연결 수를 늘리며, application.yml 구성을 다음과 같이 수정합니다:
(끝)
|