빠르고 간단하며 안정적입니다. HikariCP는 "제로 오버헤드" 프로덕션 준비 JDBC 연결 풀입니다. 대략 165Kb의 라이브러리는 매우 가볍습니다. 여기에서 우리가 어떻게 하는지 읽어보세요.
"신뢰성을 위해서는 단순함이 전제조건입니다."
- Edsger Dijkstra 박사
중요한
풀이 0이 되어 복구되지 않는 드문 상황을 방지하려면 TCP keepalive를 구성해야 합니다. 일부 JDBC 드라이버는 속성(예: PostgreSQL의 tcpKeepAlive=true
을 통해 이를 지원하지만 어떤 경우에도 OS 수준에서 구성할 수도 있습니다. 더 나은 PostgreSQL 경험을 위해서는 OS TCP Keepalive 및/또는 TCP Keepalive 설정을 참조하세요.
Java 11+ Maven 아티팩트:
< dependency >
< groupId >com.zaxxer</ groupId >
< artifactId >HikariCP</ artifactId >
< version >6.2.1</ version >
</ dependency >
Java 8 Maven 아티팩트( 유지 관리 모드 ):
< dependency >
< groupId >com.zaxxer</ groupId >
< artifactId >HikariCP</ artifactId >
< version >4.0.3</ version >
</ dependency >
Java 7 Maven 아티팩트( 유지 관리 모드 ):
< dependency >
< groupId >com.zaxxer</ groupId >
< artifactId >HikariCP-java7</ artifactId >
< version >2.4.13</ version >
</ dependency >
Java 6 Maven 아티팩트( 유지 관리 모드 ):
< dependency >
< groupId >com.zaxxer</ groupId >
< artifactId >HikariCP-java6</ artifactId >
< version >2.3.13</ version >
</ dependency >
아니면 여기에서 다운로드하세요.
JMH 마이크로벤치마크 프레임워크를 사용하여 풀의 오버헤드를 격리하고 측정하기 위해 마이크로벤치마크가 생성되었습니다. 자세한 내용은 HikariCP 벤치마크 프로젝트를 확인하고 벤치마크를 직접 검토/실행할 수 있습니다.
DataSource.getConnection()
/ Connection.close()
로 정의됩니다.Connection.prepareStatement()
, Statement.execute()
, Statement.close()
로 정의됩니다.고유한 "스파이크 수요" 부하와 관련하여 다른 풀과 비교하여 HikariCP v2.6을 분석합니다.
고객 환경에서는 새로운 연결 획득에 높은 비용이 들고 동적 크기 풀에 대한 요구 사항이 있지만 요청 급증에 대한 응답성은 필요합니다. 여기에서 스파이크 수요 처리에 대해 읽어보세요.
일명 "연결 풀 크기 조정에 대해 몰랐던 것" . Oracle Real-world Performance 그룹의 비디오를 시청하고 데이터베이스 연결이 평소보다 그렇게 많을 필요가 없는 이유를 알아보세요. 실제로 너무 많은 연결은 성능에 명확하고 입증 가능한 부정적인 영향을 미칩니다. Oracle 데모의 경우 50배의 차이가 있습니다. 알아보려면 계속 읽어보세요.
엔지니어링 블로그에 HikariCP에 대한 원치 않는 심도 있는 글을 올려주신 WIX 직원들에게 감사의 말씀을 전하고 싶습니다. 시간이 있으면 살펴보세요.
흥미로운 "데이터베이스 다운" 풀 챌린지를 읽어보세요.
다른 제품과 마찬가지로 HikariCP와 같은 오픈 소스 소프트웨어도 자유 시장에서 경쟁합니다. 우리는 그것을 얻습니다. 우리는 제품의 발전이 일단 공개되면 채택되는 경우가 많다는 것을 알고 있습니다. 그리고 우리는 아이디어가 시대정신에서 나올 수 있다는 것을 이해합니다. 동시에 그리고 독립적으로. 그러나 특히 오픈 소스 프로젝트에서 혁신의 타임라인은 명확하며 우리는 사용자가 우리 공간에서 혁신의 흐름 방향을 이해하기를 원합니다. 수백 시간에 걸친 생각과 연구의 결과가 그렇게 쉽게 선택되는 것을 보는 것은 사기를 꺾을 수 있으며 아마도 그것은 자유 시장에 내재되어 있을 것입니다. 그러나 우리는 사기를 꺾지 않습니다. 우리는 동기를 부여받았습니다. 격차를 벌리기 위해서다.
HikariCP에는 추가 조정 없이 대부분의 배포에서 잘 작동하는 정상적인 기본값이 제공됩니다. 아래 표시된 "필수"를 제외한 모든 속성은 선택 사항입니다.
? HikariCP는 모든 시간 값에 밀리초를 사용합니다.
HikariCP는 성능과 안정성 모두를 위해 정확한 타이머를 사용합니다. 서버가 NTP 서버와 같은 시간 소스와 동기화되는 것이 중요 합니다. 특히 서버가 가상 머신 내에서 실행 중인 경우에는 더욱 그렇습니다. 왜? 여기에서 자세한 내용을 읽어보세요. 가상 머신의 시계를 "동기화"하기 위해 하이퍼바이저 설정에 의존하지 마십시오. 가상 머신 내부에서 시간 소스 동기화를 구성합니다. 시간 동기화 부족으로 인해 발생한 문제에 대해 지원을 요청하면 Twitter에서 공개적으로 조롱당합니다.
? dataSourceClassName
JDBC 드라이버에서 제공하는 DataSource
클래스의 이름이다. 이 클래스 이름을 얻으려면 특정 JDBC 드라이버에 대한 설명서를 참조하거나 아래 표를 참조하세요. 참고 XA 데이터 소스는 지원되지 않습니다. XA에는 bitronix와 같은 실제 트랜잭션 관리자가 필요합니다. "구식" DriverManager 기반 JDBC 드라이버 구성에 jdbcUrl
사용하는 경우에는 이 속성이 필요하지 않습니다. 기본값: 없음
- 또는 -
? jdbcUrl
이 속성은 HikariCP가 "DriverManager 기반" 구성을 사용하도록 지시합니다. DataSource 기반 구성(위)이 여러 가지 이유로 우수하다고 생각하지만(아래 참조) 많은 배포에서는 큰 차이가 거의 없습니다. "이전" 드라이버와 함께 이 속성을 사용하는 경우에는 driverClassName
속성을 설정해야 할 수도 있지만 먼저 설정하지 않고 시도해 보세요. 이 속성을 사용하는 경우 DataSource 속성을 사용하여 드라이버를 구성할 수 있으며 실제로 URL 자체에 지정된 드라이버 매개변수보다 권장됩니다. 기본값: 없음
? username
이 속성은 기본 드라이버에서 연결을 가져올 때 사용되는 기본 인증 사용자 이름을 설정합니다. DataSource의 경우 이는 기본 DataSource에서 DataSource.getConnection(*username*, password)
호출하여 매우 결정적인 방식으로 작동합니다. 그러나 드라이버 기반 구성의 경우 모든 드라이버가 다릅니다. 드라이버 기반의 경우 HikariCP는 이 username
속성을 사용하여 드라이버의 DriverManager.getConnection(jdbcUrl, props)
호출에 전달된 Properties
에서 user
속성을 설정합니다. 이것이 필요한 것이 아니라면 이 메소드를 완전히 건너뛰고 addDataSourceProperty("username", ...)
호출하십시오. 기본값: 없음
? password
이 속성은 기본 드라이버에서 연결을 얻을 때 사용되는 기본 인증 암호를 설정합니다. DataSource의 경우 이는 기본 DataSource에서 DataSource.getConnection(username, *password*)
호출하여 매우 결정적인 방식으로 작동합니다. 그러나 드라이버 기반 구성의 경우 모든 드라이버가 다릅니다. 드라이버 기반의 경우 HikariCP는 이 password
속성을 사용하여 드라이버의 DriverManager.getConnection(jdbcUrl, props)
호출에 전달된 Properties
에 password
속성을 설정합니다. 이것이 필요한 것이 아니라면 이 메서드를 완전히 건너뛰고 addDataSourceProperty("pass", ...)
호출하세요. 기본값: 없음
✅ autoCommit
이 속성은 풀에서 반환된 연결의 기본 자동 커밋 동작을 제어합니다. 부울 값입니다. 기본값: 참
⏳ connectionTimeout
이 속성은 클라이언트(즉, 사용자)가 풀의 연결을 기다리는 최대 시간(밀리초)을 제어합니다. 연결을 사용할 수 없게 된 채 이 시간을 초과하면 SQLException이 발생합니다. 허용되는 최저 연결 시간 제한은 250ms입니다. 기본값: 30000(30초)
⏳ idleTimeout
이 속성은 연결이 풀에서 유휴 상태로 유지될 수 있는 최대 시간을 제어합니다. 이 설정은 minimumIdle
이 maximumPoolSize
보다 작게 정의된 경우에만 적용됩니다. 풀이 minimumIdle
연결에 도달하면 유휴 연결은 만료되지 않습니다 . 연결이 유휴 상태로 종료되는지 여부는 최대 +30초, 평균 +15초의 변동이 가능합니다. 이 시간 초과 이전에는 연결이 유휴 상태로 종료되지 않습니다. 값이 0이면 유휴 연결이 풀에서 제거되지 않음을 의미합니다. 허용되는 최소 값은 10000ms(10초)입니다. 기본값: 600000(10분)
⏳ keepaliveTime
이 속성은 데이터베이스 또는 네트워크 인프라에 의해 시간 초과되는 것을 방지하기 위해 HikariCP가 연결을 유지하려고 시도하는 빈도를 제어합니다. 이 값은 maxLifetime
값보다 작아야 합니다. "keepalive"는 유휴 연결에서만 발생합니다. 특정 연결에 대한 "keepalive" 시간이 도래하면 해당 연결은 풀에서 제거되고 "ping"된 다음 풀로 반환됩니다. 'ping'은 JDBC4 isValid()
메소드 호출 또는 connectionTestQuery
실행 중 하나입니다. 일반적으로 풀 외부 기간은 한 자릿수 밀리초 또는 심지어 밀리초 미만으로 측정되어야 하므로 눈에 띄는 성능 영향이 거의 또는 전혀 없어야 합니다. 최소 허용 값은 30000ms(30초)이지만 분 범위의 값이 가장 바람직합니다. 기본값: 120000(2분)
⏳ maxLifetime
이 속성은 풀 연결의 최대 수명을 제어합니다. 사용 중인 연결은 결코 폐기되지 않으며, 종료된 후에만 제거됩니다. 풀의 대량 멸종을 방지하기 위해 연결별로 약간의 음의 감쇠가 적용됩니다. 이 값을 설정하는 것이 좋습니다. 이 값은 데이터베이스 또는 인프라에 부과된 연결 시간 제한보다 몇 초 짧아야 합니다. 값 0은 최대 수명이 없음(무한 수명)을 나타내며, 물론 idleTimeout
설정이 적용됩니다. 허용되는 최소 값은 30000ms(30초)입니다. 기본값: 1800000(30분)
? connectionTestQuery
드라이버가 JDBC4를 지원하는 경우 이 속성을 설정하지 않는 것이 좋습니다. 이는 JDBC4 Connection.isValid() API
지원하지 않는 "레거시" 드라이버용입니다. 이는 풀에서 연결이 제공되기 직전에 실행되어 데이터베이스에 대한 연결이 아직 살아 있는지 확인하는 쿼리입니다. 다시 한번 이 속성 없이 풀을 실행해 보세요. 드라이버가 JDBC4와 호환되지 않으면 HikariCP가 오류를 기록하여 알려줄 것입니다. 기본값: 없음
? minimumIdle
이 속성은 HikariCP가 풀에서 유지하려고 시도하는 최소 유휴 연결 수를 제어합니다. 유휴 연결이 이 값 아래로 떨어지고 풀의 총 연결이 maximumPoolSize
미만인 경우 HikariCP는 빠르고 효율적으로 추가 연결을 추가하기 위해 최선의 노력을 다할 것입니다. 그러나 최대 성능과 급증하는 수요에 대한 응답성을 위해 이 값을 설정 하지 않고 대신 HikariCP가 고정 크기 연결 풀로 작동하도록 허용하는 것이 좋습니다. 기본값: maximumPoolSize와 동일
? maximumPoolSize
이 속성은 유휴 연결과 사용 중인 연결을 모두 포함하여 풀이 도달할 수 있는 최대 크기를 제어합니다. 기본적으로 이 값은 데이터베이스 백엔드에 대한 실제 연결의 최대 수를 결정합니다. 이에 대한 합리적인 값은 실행 환경에 따라 가장 잘 결정됩니다. 풀이 이 크기에 도달하고 사용 가능한 유휴 연결이 없으면 getConnection()에 대한 호출은 제한 시간이 초과되기 전에 최대 connectionTimeout
밀리초 동안 차단됩니다. 수영장 크기 조정에 대해 읽어보세요. 기본값: 10
? metricRegistry
이 속성은 프로그래밍 방식 구성 또는 IoC 컨테이너를 통해서만 사용할 수 있습니다. 이 속성을 사용하면 풀에서 다양한 메트릭을 기록하는 데 사용할 Codahale/Dropwizard MetricRegistry
의 인스턴스를 지정할 수 있습니다. 자세한 내용은 측정항목 위키 페이지를 참조하세요. 기본값: 없음
? healthCheckRegistry
이 속성은 프로그래밍 방식 구성 또는 IoC 컨테이너를 통해서만 사용할 수 있습니다. 이 속성을 사용하면 풀에서 현재 상태 정보를 보고하는 데 사용할 Codahale/Dropwizard HealthCheckRegistry
의 인스턴스를 지정할 수 있습니다. 자세한 내용은 상태 확인 위키 페이지를 참조하세요. 기본값: 없음
? poolName
이 속성은 연결 풀에 대한 사용자 정의 이름을 나타내며 주로 로깅 및 JMX 관리 콘솔에 나타나 풀 및 풀 구성을 식별합니다. 기본값: 자동 생성
⏳ initializationFailTimeout
이 속성은 풀이 초기 연결로 성공적으로 시드될 수 없는 경우 풀이 "빠른 실패" 여부를 제어합니다. 양수는 초기 연결 획득을 시도하는 데 걸리는 시간(밀리초)으로 간주됩니다. 이 기간 동안 애플리케이션 스레드가 차단됩니다. 이 시간 초과가 발생하기 전에 연결을 얻을 수 없으면 예외가 발생합니다. 이 시간 초과는 connectionTimeout
기간 이후에 적용됩니다. 값이 0이면 HikariCP는 연결을 얻고 유효성을 검사하려고 시도합니다. 연결을 얻었지만 유효성 검사에 실패하면 예외가 발생하고 풀이 시작되지 않습니다. 그러나 연결을 얻을 수 없는 경우 풀이 시작되지만 나중에 연결을 얻으려는 시도가 실패할 수 있습니다. 0보다 작은 값은 초기 연결 시도를 무시하고 백그라운드에서 연결을 얻으려고 시도하는 동안 풀이 즉시 시작됩니다. 결과적으로 나중에 연결을 얻으려는 노력이 실패할 수 있습니다. 기본값: 1
❎ isolateInternalQueries
이 속성은 HikariCP가 연결 활성 테스트와 같은 내부 풀 쿼리를 자체 트랜잭션에서 격리하는지 여부를 결정합니다. 이는 일반적으로 읽기 전용 쿼리이므로 자체 트랜잭션에 캡슐화할 필요가 거의 없습니다. 이 속성은 autoCommit
이 비활성화된 경우에만 적용됩니다. 기본값: 거짓
allowPoolSuspension
이 속성은 JMX를 통해 풀을 일시 중지하고 재개할 수 있는지 여부를 제어합니다. 이는 특정 장애 조치 자동화 시나리오에 유용합니다. 풀이 일시중단되면 getConnection()
에 대한 호출은 시간 초과되지 않으며 풀이 재개될 때까지 보류됩니다. 기본값: 거짓
❎ readOnly
이 속성은 풀에서 얻은 연결이 기본적으로 읽기 전용 모드인지 여부를 제어합니다. 일부 데이터베이스는 읽기 전용 모드 개념을 지원하지 않는 반면 다른 데이터베이스는 연결이 읽기 전용으로 설정된 경우 쿼리 최적화를 제공합니다. 이 속성이 필요한지 여부는 주로 애플리케이션과 데이터베이스에 따라 달라집니다. 기본값: 거짓
❎Mbeans registerMbeans
이 속성은 JMX 관리 Bean("MBean")의 등록 여부를 제어합니다. 기본값: 거짓
? catalog
이 속성은 카탈로그 개념을 지원하는 데이터베이스에 대한 기본 카탈로그를 설정합니다. 이 속성을 지정하지 않으면 JDBC 드라이버에서 정의한 기본 카탈로그가 사용됩니다. 기본값: 드라이버 기본값
? connectionInitSql
이 속성은 풀에 연결을 추가하기 전에 새로운 연결이 생성될 때마다 실행될 SQL 문을 설정합니다. 이 SQL이 유효하지 않거나 예외가 발생하는 경우 연결 실패로 처리되고 표준 재시도 논리가 따릅니다. 기본값: 없음
? driverClassName
HikariCP는 jdbcUrl
만을 기반으로 DriverManager를 통해 드라이버를 확인하려고 시도하지만 일부 이전 드라이버의 경우에는 driverClassName
도 지정해야 합니다. 드라이버를 찾을 수 없다는 명백한 오류 메시지가 표시되지 않는 한 이 속성을 생략하세요. 기본값: 없음
? transactionIsolation
이 속성은 풀에서 반환된 연결의 기본 트랜잭션 격리 수준을 제어합니다. 이 속성을 지정하지 않으면 JDBC 드라이버에서 정의한 기본 트랜잭션 격리 수준이 사용됩니다. 모든 쿼리에 공통적인 특정 격리 요구 사항이 있는 경우에만 이 속성을 사용하십시오. 이 속성의 값은 TRANSACTION_READ_COMMITTED
, TRANSACTION_REPEATABLE_READ
등과 같은 Connection
클래스의 상수 이름입니다 . 기본값: 드라이버 기본값
⏳ validationTimeout
이 속성은 연결의 활성 여부를 테스트하는 최대 시간을 제어합니다. 이 값은 connectionTimeout
보다 작아야 합니다. 허용되는 최저 검증 시간 제한은 250ms입니다. 기본값: 5000
⏳ leakDetectionThreshold
이 속성은 연결 누수 가능성을 나타내는 메시지가 기록되기 전에 연결이 풀에서 벗어날 수 있는 시간을 제어합니다. 값이 0이면 누출 감지가 비활성화됨을 의미합니다. 누출 감지를 활성화하는 데 허용되는 가장 낮은 값은 2000(2초)입니다. 기본값: 0
➡ dataSource
이 속성은 프로그래밍 방식 구성 또는 IoC 컨테이너를 통해서만 사용할 수 있습니다. 이 속성을 사용하면 HikariCP가 리플렉션을 통해 구성하도록 하는 대신 풀에 의해 래핑되도록 DataSource
의 인스턴스를 직접 설정할 수 있습니다. 이는 일부 종속성 주입 프레임워크에서 유용할 수 있습니다. 이 속성을 지정하면 dataSourceClassName
속성과 모든 DataSource 관련 속성이 무시됩니다. 기본값: 없음
? schema
이 속성은 스키마 개념을 지원하는 데이터베이스의 기본 스키마를 설정합니다. 이 속성을 지정하지 않으면 JDBC 드라이버에서 정의한 기본 스키마가 사용됩니다. 기본값: 드라이버 기본값
➡ threadFactory
이 속성은 프로그래밍 방식 구성 또는 IoC 컨테이너를 통해서만 사용할 수 있습니다. 이 속성을 사용하면 풀에서 사용되는 모든 스레드를 생성하는 데 사용되는 java.util.concurrent.ThreadFactory
의 인스턴스를 설정할 수 있습니다. 애플리케이션 컨테이너에서 제공하는 ThreadFactory
통해서만 스레드를 생성할 수 있는 일부 제한된 실행 환경에서 필요합니다. 기본값: 없음
➡ scheduledExecutor
이 속성은 프로그래밍 방식 구성 또는 IoC 컨테이너를 통해서만 사용할 수 있습니다. 이 속성을 사용하면 내부적으로 예약된 다양한 작업에 사용될 java.util.concurrent.ScheduledExecutorService
의 인스턴스를 설정할 수 있습니다. ScheduledThreadPoolExecutor
인스턴스와 함께 HikariCP를 제공하는 경우 setRemoveOnCancelPolicy(true)
를 사용하는 것이 좋습니다. 기본값: 없음
➡ exceptionOverride
이 속성은 프로그래밍 방식 구성 또는 IoC 컨테이너를 통해서만 사용할 수 있습니다. 이 속성을 사용하면 특정 예외 조건으로 인해 연결이 풀에서 제거되기 전에 호출되는 com.zaxxer.hikari.SQLExceptionOverride
인터페이스를 구현하는 클래스의 인스턴스를 설정할 수 있습니다. 일반적으로 SQLException
발생하면 특정 SQLStates 또는 ErrorCode가 있으면 풀에서 연결이 제거됩니다. adjudicate()
메소드는 SQLExceptionOverride
인스턴스에서 호출되며 Override.CONTINUE_EVICT
중 하나를 반환할 수 있습니다. Override.DO_NOT_EVICT
또는 Override.MUST_EVICT
. 매우 특정한 경우를 제외하고 Override.CONTINUE_EVICT
반환되어야 기본 제거/제거 없음 논리가 실행될 수 있습니다. 기본값: 없음
? exceptionOverrideClassName
이 속성을 사용하면 com.zaxxer.hikari.SQLExceptionOverride
인터페이스를 구현하는 사용자 제공 클래스의 이름을 지정할 수 있습니다. 클래스의 인스턴스는 연결 제거를 판정하기 위해 풀에 의해 인스턴스화됩니다. 전체 설명은 위의 exceptionOverride
속성을 참조하세요. 기본값: 없음
HikariCP에는 위에서 볼 수 있듯이 회전할 수 있는 "손잡이"가 많지만 다른 풀에 비해 상대적으로 적습니다. 이것이 디자인 철학이다. HikariCP 디자인 미학은 미니멀리즘입니다. 단순한 것이 더 낫 거나 적은 것이 더 많은 디자인 철학에 따라 일부 구성 축은 의도적으로 생략되었습니다.
Apache DBCP, Vibur, c3p0 등을 포함한 많은 연결 풀은 PreparedStatement
캐싱을 제공합니다. HikariCP는 그렇지 않습니다. 왜?
연결 풀 계층에서 PreparedStatements
연결별로 만 캐시될 수 있습니다. 애플리케이션에 일반적으로 실행되는 250개의 쿼리와 20개의 연결 풀이 있는 경우 데이터베이스에 5000개의 쿼리 실행 계획을 유지하도록 요청하는 것입니다. 마찬가지로 풀은 이 많은 PreparedStatements
및 관련 개체 그래프를 캐시해야 합니다.
PostgreSQL, Oracle, Derby, MySQL, DB2 등을 포함하여 대부분의 주요 데이터베이스 JDBC 드라이버에는 이미 구성할 수 있는 명령문 캐시가 있습니다. JDBC 드라이버는 데이터베이스 특정 기능을 활용하는 고유한 위치에 있으며 거의 모든 캐싱 구현이 연결 전체에서 실행 계획을 공유할 수 있습니다. 즉, 메모리에 있는 5000개의 문 및 관련 실행 계획 대신 일반적으로 실행되는 250개의 쿼리로 인해 데이터베이스에 정확히 250개의 실행 계획이 생성됩니다. 영리한 구현은 드라이버 수준의 메모리에 PreparedStatement
개체를 유지하지 않고 대신 기존 계획 ID에 새 인스턴스를 연결하기만 하면 됩니다.
풀링 계층에서 명령문 캐시를 사용하는 것은 안티 패턴이며 드라이버 제공 캐시에 비해 애플리케이션 성능에 부정적인 영향을 미칩니다.
명령문 캐싱과 마찬가지로 대부분의 주요 데이터베이스 공급업체는 자체 드라이버 속성을 통해 명령문 로깅을 지원합니다. 여기에는 Oracle, MySQL, Derby, MSSQL 등이 포함됩니다. 일부는 느린 쿼리 로깅을 지원하기도 합니다. 이를 지원하지 않는 소수의 데이터베이스의 경우 몇 가지 옵션을 사용할 수 있습니다. 우리는 p6spy가 잘 작동한다는 보고를 받았으며, log4jdbc 및 jdbcdslog-exp도 사용할 수 있다는 점에 주목했습니다.
데이터베이스 재시작 및 네트워크 파티션 이벤트로부터 적절한 복구를 위해 드라이버와 시스템을 구성하는 방법에 대한 자세한 내용은 빠른 복구 안내서를 읽어보십시오.
다음 과 같이 HikariConfig
클래스를 사용할 수 있습니다.
HikariConfig config = new HikariConfig ();
config . setJdbcUrl ( "jdbc:mysql://localhost:3306/simpsons" );
config . setUsername ( "bart" );
config . setPassword ( "51mp50n" );
config . addDataSourceProperty ( "cachePrepStmts" , "true" );
config . addDataSourceProperty ( "prepStmtCacheSize" , "250" );
config . addDataSourceProperty ( "prepStmtCacheSqlLimit" , "2048" );
HikariDataSource ds = new HikariDataSource ( config );
1 MySQL 관련 예, 그대로 복사하지 마십시오.
또는 다음과 같이 HikariDataSource
를 직접 인스턴스화합니다.
HikariDataSource ds = new HikariDataSource ();
ds . setJdbcUrl ( "jdbc:mysql://localhost:3306/simpsons" );
ds . setUsername ( "bart" );
ds . setPassword ( "51mp50n" );
...
또는 속성 파일 기반:
// Examines both filesystem and classpath for .properties file
HikariConfig config = new HikariConfig ( "/some/path/hikari.properties" );
HikariDataSource ds = new HikariDataSource ( config );
예제 속성 파일:
dataSourceClassName =org.postgresql.ds.PGSimpleDataSource
dataSource.user =test
dataSource.password =test
dataSource.databaseName =mydb
dataSource.portNumber =5432
dataSource.serverName =localhost
또는 java.util.Properties
기반:
Properties props = new Properties ();
props . setProperty ( "dataSourceClassName" , "org.postgresql.ds.PGSimpleDataSource" );
props . setProperty ( "dataSource.user" , "test" );
props . setProperty ( "dataSource.password" , "test" );
props . setProperty ( "dataSource.databaseName" , "mydb" );
props . put ( "dataSource.logWriter" , new PrintWriter ( System . out ));
HikariConfig config = new HikariConfig ( props );
HikariDataSource ds = new HikariDataSource ( config );
속성 파일의 위치를 지정하는 데 사용할 수 있는 시스템 속성 hikaricp.configurationFile
도 있습니다. 이 옵션을 사용하려는 경우 기본 생성자를 사용하여 HikariConfig
또는 HikariDataSource
인스턴스를 생성하면 속성 파일이 로드됩니다.
MySQL 성능 팁
jdbcUrl
대신 dataSourceClassName
사용하는 것이 좋지만 어느 쪽이든 허용됩니다. 다시 한번 말씀드리지만 둘 중 하나가 허용됩니다 .
참고: Spring Boot 자동 구성 사용자는 jdbcUrl
기반 구성을 사용해야 합니다.
MySQL DataSource는 네트워크 시간 초과 지원과 관련하여 손상된 것으로 알려져 있습니다. 대신 jdbcUrl
구성을 사용하십시오.
다음은 널리 사용되는 데이터베이스에 대한 JDBC DataSource 클래스 목록입니다.
데이터 베이스 | 운전사 | 데이터소스 클래스 |
---|---|---|
아파치 더비 | 더비 | org.apache.derby.jdbc.ClientDataSource |
파이어버드 | 제이버드 | org.firebirdsql.ds.FBSimpleDataSource |
구글 스패너 | 스패너 | com.google.cloud.spanner.jdbc.JdbcDriver |
H2 | H2 | org.h2.jdbcx.JdbcDataSource |
HSQLDB | HSQLDB | org.hsqldb.jdbc.JDBCDataSource |
IBM DB2 | IBM JCC | com.ibm.db2.jcc.DB2SimpleDataSource |
IBM 인포믹스 | IBM 인포믹스 | com.informix.jdbcx.IfxDataSource |
MS SQL 서버 | 마이크로소프트 | com.microsoft.sqlserver.jdbc.SQLServerDataSource |
커넥터/J | ||
마리아DB | 마리아DB | org.mariadb.jdbc.MariaDbDataSource |
신탁 | 신탁 | oracle.jdbc.pool.OracleDataSource |
오리엔트DB | 오리엔트DB | com.orienttechnologies.orient.jdbc.OrientDataSource |
포스트그레SQL | pgjdbc-ng | com.impossibl.postgres.jdbc.PGDataSource |
포스트그레SQL | 포스트그레SQL | org.postgresql.ds.PGSimpleDataSource |
SAP MaxDB | 수액 | com.sap.dbtech.jdbc.DriverSapDB |
SQLite | 제리얼 | org.sqlite.SQLiteDataSource |
사이베이스 | jConnect | com.sybase.jdbc4.jdbc.SybDataSource |
참고 Play 2.4는 이제 기본적으로 HikariCP를 사용합니다. Play 프레임워크를 위한 새로운 플러그인이 출시되었습니다. 플레이-히카릭프. 뛰어난 Play 프레임워크를 사용하고 있다면 애플리케이션에 HikariCP가 필요합니다. Edulify 팀에 감사드립니다!
tomekw가 새로운 Clojure 래퍼를 만들었으며 여기에서 찾을 수 있습니다.
새로운 JRuby 래퍼는 tomekw에 의해 생성되었으며 여기에서 찾을 수 있습니다.
Google 토론 그룹 HikariCP가 여기에 FAQ를 추가하고 있습니다.
다음과 같은 추가 정보를 보려면 Wiki를 잊지 마세요.
⇒ Java 8+(Java 6/7 아티팩트가 유지 관리 모드에 있음)
⇒ slf4j 라이브러리
고성능 프로젝트에는 도구가 너무 많아서는 안 됩니다! 우리는 다음 회사들에게 감사의 말씀을 전하고 싶습니다:
뛰어난 올인원 프로파일러인 JProfiler를 제공한 ej-technologies에 감사드립니다.
YourKit은 모든 기능을 갖춘 Java 프로파일러를 통해 오픈 소스 프로젝트를 지원합니다. 자세히 알아보려면 아래 YourKit 로고를 클릭하세요.
master
대신 dev
브랜치에서 변경을 수행하고 풀 요청을 제출하세요. 탭 대신 공백을 사용하도록 편집기를 설정하고 편집 중인 코드의 명백한 스타일을 준수하십시오. 가장자리에서 생활하려는 경우 dev
브랜치는 항상 master
보다 "최신"입니다.