나는 마주 HikariCP쳤고 벤치 마크에 놀랐고 기본 선택 대신 사용해보고 싶었고 C3P0놀랍게도 configurations사용중인 기술 스택의 조합에 따라 구성이 다르기 때문에 올바른 것을 얻기 위해 고군분투 했습니다.
연결 풀링 과 함께 데이터베이스 로 사용할 스타터 ( Spring Initializer 사용) 가있는 설정 Spring Boot프로젝트가 있습니다.
나는 빌드 도구로 사용 했으며 다음 가정에서 나를 위해 일한 것을 공유하고 싶습니다.JPA, Web, SecurityPostgreSQLHikariCP
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-hikaricporg.hibernate.hikaricp.internal.HikariCPConnectionProvidercom.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 공개 요점으로도 사용할 수 있습니다.