내 application.properties 파일의 Spring Boot 앱에서 HikariCP를 어떻게 구성합니까?
Spring Boot (1.2.0.M1) 앱에서 HikariCP를 설정하여 Tomcat DBCP 대신 사용하여 테스트 할 수 있습니다. Tomcat에서했던 것처럼 application.properties 파일에서 연결 풀을 구성하고 싶지만 어떻게해야하는지 알 수 없습니다. 내가 찾은 모든 예제는 JavaConfig 스타일 또는 별도의 HikariCP 속성 파일을 사용합니다. 누군가가 application.properties에서 구성하기 위해 속성 이름을 알아낼 수 있습니까? 또한 driverClassName 접근 방식을 사용하는 것에서 DataSourceClassName 접근 방식으로 전환하고 싶습니다. 더 깔끔해 보이고 권장됩니다. 내 application.properties 파일에서도 가능합니까?
다음은 Tomcat DBCP에 대한 것입니다 (완전히 플러시되지 않은 일부 기본 구성)
spring.datasource.validation-query=SELECT 1
spring.datasource.max-active=10
spring.datasource.max-idle=8
spring.datasource.min-idle=8
spring.datasource.initial-size=5
spring.datasource.test-on-borrow=true
spring.datasource.test-on-return=true
그리고 현재 driverClassName과 jdbc url을 사용하여 연결을 설정하고 있습니다.
spring.datasource.url=jdbc:mysql://localhost:3306/myDb
spring.datasource.driverClassName=com.mysql.jdbc.Driver
@Configuration
@ConfigurationProperties(prefix = "params.datasource")
public class JpaConfig extends HikariConfig {
@Bean
public DataSource dataSource() throws SQLException {
return new HikariDataSource(this);
}
}
application.yml
params:
datasource:
driverClassName: com.mysql.jdbc.Driver
jdbcUrl: jdbc:mysql://localhost:3306/myDb
username: login
password: password
maximumPoolSize: 5
업데이트되었습니다! 버전 Spring Boot 1.3.0 이후 :
- HikariCP를 종속성에 추가하기 만하면됩니다.
- application.yml 구성
application.yml
spring:
datasource:
type: com.zaxxer.hikari.HikariDataSource
url: jdbc:h2:mem:TEST
driver-class-name: org.h2.Driver
username: username
password: password
hikari:
idle-timeout: 10000
업데이트되었습니다! 버전 Spring Boot 2.0.0 이후 :
기본 연결 풀이 Tomcat에서 Hikari로 변경되었습니다. :)
application.yml / application.properties 만 사용할 수 있습니다. 명시 적으로 DataSource
Bean을 생성 할 필요가 없습니다.
ydemartino가 언급 한대로 tomcat-jdbc를 제외해야합니다.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
<exclusions>
<exclusion>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-jdbc</artifactId>
</exclusion>
</exclusions>
</dependency>
DataSource
Bean을 생성하지 않기 때문에 application.yml / application.properties의 spring.datasource.type
값 com.zaxxer.hikari.HikariDataSource
을 통해 Hikari 사용을 명시 적으로 지정해야 합니다.
spring:
datasource:
hikari:
connection-test-query: SELECT 1 FROM DUAL
minimum-idle: 1
maximum-pool-size: 5
pool-name: yourPoolName
auto-commit: false
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/myDb
username: login
password: password
type: com.zaxxer.hikari.HikariDataSource
application.yml / application.properties에서 풀 크기 등과 같은 Hikari 특정 매개 변수를 구성 할 수 있습니다. spring.datasource.hikari.*
나는 마주 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')
// Exclude the tomcat-jdbc since it's used as default for connection pooling
// This can also be achieved by setting the spring.datasource.type to HikariCP
// datasource see application.properties below
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')
// Download HikariCP but, exclude hibernate-core to avoid version conflicts
compile('com.zaxxer:HikariCP:2.5.1') {
exclude group: 'org.hibernate', module: 'hibernate-core'
}
// Need this in order to get the HikariCPConnectionProvider
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://localhost:5432/somedb
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 공개 요점으로도 사용할 수 있습니다.
변수에 속성 값을 입력하기 위해 중복 코드가 필요하지 않습니다. 속성 파일을 사용하여 직접 속성을 설정할 수 있습니다.
hikari.properties
클래스 경로에 파일을 넣으십시오 .
driverClassName=com.mysql.jdbc.Driver
jdbcUrl=jdbc:mysql://localhost:3306/myDb
connectionTestQuery=SELECT 1
maximumPoolSize=20
username=...
password=...
그리고 이와 같은 데이터 소스 빈을 만드십시오.
@Bean(destroyMethod = "close")
public DataSource dataSource() throws SQLException {
HikariConfig config = new HikariConfig("/hikari.properties");
HikariDataSource dataSource = new HikariDataSource(config);
return dataSource;
}
이것은 도움이 될 경우 내 부팅 응용 프로그램에서 작동합니다. 이 클래스는 구성 개체가 찾고있는 속성을 알려줍니다.
datasource_whatever
소스 구성 파일의 속성 키에 추가하면 여러 데이터 소스가 지원 될 수 있다고 생각 합니다. 건배!
@Configuration
class DataSourceConfig {
@Value('${spring.datasource.username}')
private String user;
@Value('${spring.datasource.password}')
private String password;
@Value('${spring.datasource.url}')
private String dataSourceUrl;
@Value('${spring.datasource.dataSourceClassName}')
private String dataSourceClassName;
@Value('${spring.datasource.connectionTimeout}')
private int connectionTimeout;
@Value('${spring.datasource.maxLifetime}')
private int maxLifetime;
@Bean
public DataSource primaryDataSource() {
Properties dsProps = [url: dataSourceUrl, user: user, password: password]
Properties configProps = [
connectionTestQuery: 'select 1 from dual',
connectionTimeout: connectionTimeout,
dataSourceClassName: dataSourceClassName,
dataSourceProperties: dsProps,
maxLifetime: maxLifetime
]
// A default max pool size of 10 seems reasonable for now, so no need to configure for now.
HikariConfig hc = new HikariConfig(configProps)
HikariDataSource ds = new HikariDataSource(hc)
ds
}
}
dataSourceClassName 접근 방식을 사용할 수 있습니다. 여기에 MySQL의 예가 있습니다. (스프링 부트 1.3 및 1.4로 테스트 됨)
먼저 hikaricp를 선호하는 클래스 경로에서 tomcat-jdbc를 제외해야합니다.
pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
<exclusions>
<exclusion>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-jdbc</artifactId>
</exclusion>
</exclusions>
</dependency>
application.properties
spring.datasource.dataSourceClassName=com.mysql.jdbc.jdbc2.optional.MysqlDataSource
spring.datasource.dataSourceProperties.serverName=localhost
spring.datasource.dataSourceProperties.portNumber=3311
spring.datasource.dataSourceProperties.databaseName=mydb
spring.datasource.username=root
spring.datasource.password=root
그런 다음 추가하십시오
@Bean
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource dataSource() {
return DataSourceBuilder.create().build();
}
여기에 테스트 프로젝트를 만들었습니다 : https://github.com/ydemartino/spring-boot-hikaricp
@Andy Wilkinson이 말한 것처럼 application.properties 구성에서 dataSourceClassName 접근 방식을 사용할 수 없습니다. 어쨌든 dataSourceClassName을 갖고 싶다면 Java Config를 다음과 같이 사용할 수 있습니다.
@Configuration
@ComponentScan
class DataSourceConfig {
@Value("${spring.datasource.username}")
private String user;
@Value("${spring.datasource.password}")
private String password;
@Value("${spring.datasource.url}")
private String dataSourceUrl;
@Value("${spring.datasource.dataSourceClassName}")
private String dataSourceClassName;
@Value("${spring.datasource.poolName}")
private String poolName;
@Value("${spring.datasource.connectionTimeout}")
private int connectionTimeout;
@Value("${spring.datasource.maxLifetime}")
private int maxLifetime;
@Value("${spring.datasource.maximumPoolSize}")
private int maximumPoolSize;
@Value("${spring.datasource.minimumIdle}")
private int minimumIdle;
@Value("${spring.datasource.idleTimeout}")
private int idleTimeout;
@Bean
public DataSource primaryDataSource() {
Properties dsProps = new Properties();
dsProps.put("url", dataSourceUrl);
dsProps.put("user", user);
dsProps.put("password", password);
dsProps.put("prepStmtCacheSize",250);
dsProps.put("prepStmtCacheSqlLimit",2048);
dsProps.put("cachePrepStmts",Boolean.TRUE);
dsProps.put("useServerPrepStmts",Boolean.TRUE);
Properties configProps = new Properties();
configProps.put("dataSourceClassName", dataSourceClassName);
configProps.put("poolName",poolName);
configProps.put("maximumPoolSize",maximumPoolSize);
configProps.put("minimumIdle",minimumIdle);
configProps.put("minimumIdle",minimumIdle);
configProps.put("connectionTimeout", connectionTimeout);
configProps.put("idleTimeout", idleTimeout);
configProps.put("dataSourceProperties", dsProps);
HikariConfig hc = new HikariConfig(configProps);
HikariDataSource ds = new HikariDataSource(hc);
return ds;
}
}
throw 및 예외가 발생하기 때문에 dataSourceClassName을 사용할 수없는 이유
Caused by: java.lang.IllegalStateException: both driverClassName and dataSourceClassName are specified, one or the other should be used.
즉, 스프링 부트는 spring.datasource.url 속성에서 Driver를 유추하고 동시에 dataSourceClassName을 설정하면이 예외가 생성됩니다. 올바르게 만들려면 application.properties가 HikariCP 데이터 소스에 대해 다음과 같아야합니다.
# hikariCP
spring.jpa.databasePlatform=org.hibernate.dialect.MySQLDialect
spring.datasource.url=jdbc:mysql://localhost:3306/exampledb
spring.datasource.username=root
spring.datasource.password=
spring.datasource.poolName=SpringBootHikariCP
spring.datasource.maximumPoolSize=5
spring.datasource.minimumIdle=3
spring.datasource.maxLifetime=2000000
spring.datasource.connectionTimeout=30000
spring.datasource.idleTimeout=30000
spring.datasource.pool-prepared-statements=true
spring.datasource.max-open-prepared-statements=250
참고 : 전 이적 종속성에 의해 대부분 추가 된 클래스 경로에 tomcat-jdbc.jar 또는 commons-dbcp.jar가 있는지 확인하십시오. 이것이 클래스 경로에 있으면 Spring Boot는 tomcat 인 기본 연결 풀을 사용하여 데이터 소스를 구성합니다. HikariCP는 클래스 경로에 다른 공급자가없는 경우에만 데이터 소스를 만드는 데 사용됩니다. tomcat-> HikariCP-> Commons DBCP 로의 폴백 시퀀스가 있습니다.
문서에 따르면 변경되었습니다.
https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-sql.html
예 :
spring:
datasource:
url: 'jdbc:mysql://localhost/db?useSSL=false'
username: root
password: pass
driver: com.mysql.jdbc.Driver
hikari:
minIdle: 10
idle-timeout: 10000
maximumPoolSize: 30
다음은 hikari에서 수행 할 수있는 구성 변경 사항입니다. 필요에 따라 추가 / 업데이트하십시오.
autoCommit
connectionTimeout
idleTimeout
maxLifetime
connectionTestQuery
connectionInitSql
validationTimeout
maximumPoolSize
poolName
allowPoolSuspension
readOnly
transactionIsolation
leakDetectionThreshold
따라서 HikariCP의 거의 모든 기본 설정이 DB 연결 수를 제외하고는 저에게 효과적이라는 것이 밝혀졌습니다. 내 application.properties에서 해당 속성을 설정했습니다.
spring.datasource.maximumPoolSize=20
그리고 Andy Wilkinson은 Spring Boot에서 HikariCP에 대한 dataSourceClassName 구성 접근 방식을 사용할 수 없다는 점에서 옳습니다.
여기에 좋은 소식이 있습니다. HikariCP는 이제 Spring Boot 2.0.0에서 기본 연결 풀입니다.
Spring Boot 2.0의 기본 데이터베이스 풀링 기술은 Tomcat Pool에서 HikariCP로 전환되었습니다. Hakari는 우수한 성능을 제공하며 많은 사용자가 Tomcat Pool보다 선호하는 것으로 나타났습니다.
Spring Boot 2.0.4.RELEASE를 사용하고 있습니다. Hikari는 기본 연결 풀이며 .hikari
더 이상 필요하지 않습니다.
application.properties
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.jdbcUrl=jdbc:mysql://localhost:3306/myDB...
spring.datasource.username=xxx
spring.datasource.password=xxx
spring.datasource.poolname=myPool
application.yml
spring:
datasource:
driverClassName: com.mysql.jdbc.Driver
jdbcUrl: jdbc:mysql://localhost:3306/myDB...
username: xxx
password: xxx
poolName: myPool
그리고 configuration
확장 할 필요가 없습니다 HikariConfig
, 그리고 DataSourceBuilder
그것은 예전로 사용할 수 있습니다.
@Configuration
public class DataSourceConfiguration {
@Bean(name="myDataSource")
@ConfigurationProperties("spring.datasource")
public DataSource myDataSource() {
return DataSourceBuilder.create().build();
}
}
내 설정 :
Spring Boot v1.5.10
Hikari v.3.2.x (평가 용)
Hikari 데이터 소스의 구성을 실제로 이해하려면 Spring Boot의 데이터 소스에 대한 자동 구성을 비활성화하는 것이 좋습니다.
application.properties에 다음을 추가하십시오.
spring.autoconfigure.exclude = org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
이것은 자체적으로 DataSource를 구성하는 Spring Boot의 기능을 비활성화합니다.
이제 HikariDataSource bean을 생성하고 원하는 속성으로 채우기 위해 사용자 정의 구성을 정의 할 수 있습니다.
참고 :::
공용 클래스 HikariDataSource는 HikariConfig를 확장합니다.
당신은
- 원하는 Hikari 속성을 사용하여 HikariConfig 개체 채우기
- 생성자에 인수로 전달 된 HikariConfig 객체를 사용하여 HikariDataSource 객체를 초기화합니다.
I believe in defining my own Custom Configuration class ( @Configuration ) to create the data source on my own and populate it with the data source properties defined in a separate file (than traditional: application.properties)
In this manner I can define my own sessionFactory Bean using Hibernate recommended: "LocalSessionFactoryBean" class and populate it with your Hikari Data Source > and other Hiberante-JPA based properties.
Summary of Spring Boot based Hikari DataSource Properties:-
spring.datasource.hikari.allow-pool-suspension=true
spring.datasource.hikari.auto-commit=false
spring.datasource.hikari.catalog=
spring.datasource.hikari.connection-init-sql=
spring.datasource.hikari.connection-test-query=
spring.datasource.hikari.connection-timeout=100
spring.datasource.hikari.data-source-class-name=
spring.datasource.hikari.data-source-j-n-d-i=
spring.datasource.hikari.driver-class-name=
spring.datasource.hikari.idle-timeout=50
spring.datasource.hikari.initialization-fail-fast=true
spring.datasource.hikari.isolate-internal-queries=true
spring.datasource.hikari.jdbc-url=
spring.datasource.hikari.leak-detection-threshold=
spring.datasource.hikari.login-timeout=60
spring.datasource.hikari.max-lifetime=
spring.datasource.hikari.maximum-pool-size=500
spring.datasource.hikari.minimum-idle=30
spring.datasource.hikari.password=
spring.datasource.hikari.pool-name=
spring.datasource.hikari.read-only=true
spring.datasource.hikari.register-mbeans=true
spring.datasource.hikari.transaction-isolation=
spring.datasource.hikari.username=
spring.datasource.hikari.validation-timeout=
This will help anyone who wants to configure hikaricp for their application with spring auto configuration. For my project, im using spring boot 2 with hikaricp as the JDBC connection pool and mysql as the database. One thing I didn't see in other answers was the data-source-properties
which can be used to set various properties that are not available at the spring.datasource.hikari.*
path. This is equivalent to using the HikariConfig
class. To configure the datasource and hikaricp connection pool for mysql specific properties I used the spring auto configure annotation and the following properties in the application.yml file.
Place @EnableAutoConfiguration
on one of your configuration bean files.
application.yml file can look like this.
spring:
datasource:
url: 'jdbc:mysql://127.0.0.1:3306/DATABASE?autoReconnect=true&useSSL=false'
username: user_name
password: password
hikari:
maximum-pool-size: 20
data-source-properties:
cachePrepStmts: true
prepStmtCacheSize: 250
prepStmtCacheSqlLimit: 2048
useServerPrepStmts: true
useLocalSessionState: true
rewriteBatchedStatements: true
cacheResultSetMetadata: true
cacheServerConfiguration: true
elideSetAutoCommits: true
maintainTimeStats: false
With the later spring-boot releases switching to Hikari can be done entirely in configuration. I'm using 1.5.6.RELEASE
and this approach works.
build.gradle:
compile "com.zaxxer:HikariCP:2.7.3"
application YAML
spring:
datasource:
type: com.zaxxer.hikari.HikariDataSource
hikari:
idleTimeout: 60000
minimumIdle: 2
maximumPoolSize: 20
connectionTimeout: 30000
poolName: MyPoolName
connectionTestQuery: SELECT 1
Change connectionTestQuery
to suit your underlying DB. That's it, no code required.
'IT박스' 카테고리의 다른 글
scipy : 프레임, 축, 콘텐츠 만없는 savefig (0) | 2020.11.03 |
---|---|
ASP.NET C #에서 foreach를 사용하여 CheckBoxList에서 선택한 항목의 값을 얻는 방법은 무엇입니까? (0) | 2020.11.03 |
Swift (iOS)에서 라디오 버튼과 체크 박스를 만드는 방법은 무엇입니까? (0) | 2020.11.03 |
SQL Server : 테이블의 최대 행 수 (0) | 2020.11.03 |
문자열에서 클래스 유형 가져 오기 (0) | 2020.11.03 |