나는 마주 HikariCP
쳤고 벤치 마크에 놀랐고 기본 선택 대신 사용해보고 싶었고 C3P0
놀랍게도 configurations
사용중인 기술 스택의 조합에 따라 구성이 다르기 때문에 올바른 것을 얻기 위해 고군분투 했습니다.
연결 풀링 과 함께 데이터베이스 로 사용할 스타터 ( Spring Initializer 사용) 가있는 설정 Spring Boot
프로젝트가 있습니다.
나는 빌드 도구로 사용 했으며 다음 가정에서 나를 위해 일한 것을 공유하고 싶습니다.JPA, Web, Security
PostgreSQL
HikariCP
Gradle
- Spring Boot Starter JPA (웹 및 보안-선택 사항)
- Gradle 빌드도
- 데이터베이스 (예 : 스키마, 사용자, db)를 사용하여 PostgreSQL 실행 및 설정
다음이 필요합니다 build.gradle
당신이 사용하는 경우 Gradle
또는 이에 상응하는 pom.xml
당신이 받는다는을 사용하는 경우
buildscript {
ext {
springBootVersion = '1.5.8.RELEASE'
}
repositories {
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
}
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
apply plugin: 'war'
group = 'com'
version = '1.0'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
compile('org.springframework.boot:spring-boot-starter-aop')
compile('org.springframework.boot:spring-boot-starter-data-jpa') {
exclude group: 'org.apache.tomcat', module: 'tomcat-jdbc'
}
compile('org.springframework.boot:spring-boot-starter-security')
compile('org.springframework.boot:spring-boot-starter-web')
runtime('org.postgresql:postgresql')
testCompile('org.springframework.boot:spring-boot-starter-test')
testCompile('org.springframework.security:spring-security-test')
compile('com.zaxxer:HikariCP:2.5.1') {
exclude group: 'org.hibernate', module: 'hibernate-core'
}
compile('org.hibernate:hibernate-hikaricp:5.2.11.Final') {
exclude group: 'com.zaxxer', module: 'HikariCP'
exclude group: 'org.hibernate', module: 'hibernate-core'
}
}
위의 제외의 무리가 있습니다 build.gradle
그 때문에이
- 먼저 제외, 종속성을
jdbc-tomcat
다운로드 할 때 연결 풀 을 제외하도록 gradle에 지시 합니다 spring-boot-starter-data-jpa
. 이것은 spring.datasource.type=com.zaxxer.hikari.HikariDataSource
또한 설정하여 얻을 수 있지만 필요하지 않으면 추가 종속성을 원하지 않습니다.
- 두 번째 제외는 종속
hibernate-core
항목을 다운로드 할 때 제외하도록 gradle에 지시합니다. com.zaxxer
이는 hibernate-core
이미에 의해 다운로드되었으며 Spring Boot
다른 버전으로 끝나고 싶지 않기 때문 입니다 .
- 세 번째 제외, HikariCP 가 더 이상 사용되지 않는 대신 연결 공급자로 사용되도록하기 위해 필요한 모듈을
hibernate-core
다운로드 할 때 제외하도록 gradle에 지시합니다.hibernate-hikaricp
org.hibernate.hikaricp.internal.HikariCPConnectionProvider
com.zaxxer.hikari.hibernate.HikariConnectionProvider
일단 내가 build.gradle
무엇을, 무엇을 유지하고, 무엇을하지 말아야하는지 알아 내자 , datasource
구성 을 복사 / 붙여 넣기 할 준비가되었고 application.properties
모든 것이 플라잉 컬러로 작동 할 것으로 예상했지만 실제로는 아니 었고 다음 문제를 발견했습니다.
- 스프링 부트가 데이터베이스 세부 정보 (예 : URL, 드라이버)를 찾지 못해 jpa 및 최대 절전 모드를 설정할 수 없습니다 (속성 키 값의 이름을 올바르게 지정하지 않았기 때문에)
- HikariCP가
com.zaxxer.hikari.hibernate.HikariConnectionProvider
- Hibernate / jpa를 자동 구성 할 때 새로운 연결 제공자를 사용하도록 Spring에 지시 한 후 HikariCP는에서 일부
key/value
를 찾고 application.properties
불평 했기 때문에 실패했습니다 dataSource, dataSourceClassName, jdbcUrl
. 나는 디버깅해야 HikariConfig, HikariConfigurationUtil, HikariCPConnectionProvider
했고 이름이 다르기 때문에 HikariCP
속성을 찾을 수 없다는 것을 알았습니다 application.properties
.
어쨌든 이것은 시행 착오에 의존 HikariCP
하고 속성 (즉, db 세부 정보 인 데이터 소스 및 풀링 속성)을 선택할 수 있는지 확인하고 Sping Boot가 예상대로 작동하는지 확인해야했습니다. 다음 application.properties
파일.
server.contextPath=/
debug=true
# Spring data source needed for Spring boot to behave
# Pre Spring Boot v2.0.0.M6 without below Spring Boot defaults to tomcat-jdbc connection pool included
# in spring-boot-starter-jdbc and as compiled dependency under spring-boot-starter-data-jpa
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.url=jdbc:postgresql:
spring.datasource.username=dbuser
spring.datasource.password=dbpassword
# Hikari will use the above plus the following to setup connection pooling
spring.datasource.hikari.minimumIdle=5
spring.datasource.hikari.maximumPoolSize=20
spring.datasource.hikari.idleTimeout=30000
spring.datasource.hikari.poolName=SpringBootJPAHikariCP
spring.datasource.hikari.maxLifetime=2000000
spring.datasource.hikari.connectionTimeout=30000
# Without below HikariCP uses deprecated com.zaxxer.hikari.hibernate.HikariConnectionProvider
# Surprisingly enough below ConnectionProvider is in hibernate-hikaricp dependency and not hibernate-core
# So you need to pull that dependency but, make sure to exclude it's transitive dependencies or you will end up
# with different versions of hibernate-core
spring.jpa.hibernate.connection.provider_class=org.hibernate.hikaricp.internal.HikariCPConnectionProvider
# JPA specific configs
spring.jpa.properties.hibernate.show_sql=true
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.properties.hibernate.use_sql=true
spring.jpa.properties.hibernate.id.new_generator_mappings=false
spring.jpa.properties.hibernate.default_schema=dbschema
spring.jpa.properties.hibernate.search.autoregister_listeners=false
spring.jpa.properties.hibernate.bytecode.use_reflection_optimizer=false
# Enable logging to verify that HikariCP is used, the second entry is specific to HikariCP
logging.level.org.hibernate.SQL=DEBUG
logging.level.com.zaxxer.hikari.HikariConfig=DEBUG
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE
위와 같이 구성은 다음과 같은 이름 지정 패턴에 따라 범주로 나뉩니다.
- spring.datasource.x (Spring 자동 구성이이를 선택하므로 HikariCP도 선택 함)
- spring.datasource.hikari.x (HikariCP는이를 선택하여 풀을 설정하고 camelCase 필드 이름을 기록해 둡니다.)
- spring.jpa.hibernate.connection.provider_class (Spring에게 새로운 HibernateConnectionProvider를 사용하도록 지시)
- spring.jpa.properties.hibernate.x (Spring에서 JPA를 자동 구성하는 데 사용하며 밑줄로 필드 이름을 기록해 두십시오)
위의 속성 파일을 사용하는 방법과 속성의 이름을 지정하는 방법을 보여주는 자습서, 게시물 또는 리소스를 찾기가 어렵습니다. 글쎄, 당신은 그것을 가지고 있습니다.
위의 던지기 application.properties
와 build.gradle
(또는 이와 유사한 이상) 스프링 부팅 JPA 프로젝트 버전 (1.5.8)로하면 마법처럼 작동하고 사전 구성된 데이터베이스에 연결해야합니다 (즉, 내 경우 그것의 PostgreSQL의에서 그 모두 HikariCP & Spring
로부터 파악 spring.datasource.url
되는에 사용할 데이터베이스 드라이버).
나는 DataSource
빈 을 생성 할 필요성을 보지 못했고 그것은 Spring Boot가 단지 들여다보기 application.properties
만해도 나를 위해 모든 것을 할 수 있고 그것은 깔끔하기 때문이다.
기사 HikariCP의 GitHub의의의 위키 설정하는 방법 봄 JPA로 부팅 만에 쇼 설명과 세부 사항이 부족하다.
위의 두 파일은 https://gist.github.com/rhamedy/b3cb936061cc03acdfe21358b86a5bc6 공개 요점으로도 사용할 수 있습니다.