[java] Spring-Boot : 최대 연결 수와 같은 JDBC 풀 속성을 어떻게 설정합니까?

Spring-Boot는 매우 멋진 도구이지만 고급 구성에 관해서는 문서가 약간 드뭅니다. 데이터베이스 연결 풀의 최대 크기와 같은 속성을 어떻게 설정할 수 있습니까?

봄 부팅 지원이 tomcat-jdbc, HikariCP그리고 Commons DBCP기본적으로 모두 동일한 방식으로 구성되어있다?



답변

이러한 구성 속성을 설정하는 것은 매우 간단하지만 공식 문서 가 더 일반적이므로 연결 풀 구성 정보를 구체적으로 검색 할 때 찾기 어려울 수 있습니다.

tomcat-jdbc의 최대 풀 크기를 설정하려면 .properties 또는 .yml 파일에서이 속성을 설정합니다.

spring.datasource.maxActive=5

원하는 경우 다음을 사용할 수도 있습니다.

spring.datasource.max-active=5

이 방법으로 원하는 연결 풀 속성을 설정할 수 있습니다. 에서 지원하는 전체 속성 목록은 다음과 같습니다tomcat-jdbc .

이것이 어떻게 더 일반적으로 작동하는지 이해하려면 Spring-Boot 코드를 조금 파헤쳐 야합니다.

Spring-Boot는 다음과 같이 DataSource를 구성합니다 ( 여기 , 102 행 참조 ).

@ConfigurationProperties(prefix = DataSourceAutoConfiguration.CONFIGURATION_PREFIX)
@Bean
public DataSource dataSource() {
    DataSourceBuilder factory = DataSourceBuilder
            .create(this.properties.getClassLoader())
            .driverClassName(this.properties.getDriverClassName())
            .url(this.properties.getUrl())
            .username(this.properties.getUsername())
            .password(this.properties.getPassword());
    return factory.build();
}

DataSourceBuilder는 클래스 경로에있는 일련의 알려진 클래스를 각각 확인하여 사용할 풀링 라이브러리를 파악합니다. 그런 다음 DataSource를 구성하고이를 dataSource()함수에 반환합니다 .

이 시점에서 마법은 @ConfigurationProperties. 이 주석은 접두사와 특성을 찾아 봄을 알려줍니다 CONFIGURATION_PREFIX(이다 spring.datasource). 해당 접두어로 시작하는 각 속성에 대해 Spring은 해당 속성을 사용하여 DataSource에서 setter를 호출하려고 시도합니다.

Tomcat DataSource는 메서드가있는 DataSourceProxy 의 확장입니다 setMaxActive().

그리고 그것이 당신 spring.datasource.maxActive=5이 올바르게 적용되는 방법입니다 !

다른 연결 풀은 어떻습니까

시도하지 않았지만 다른 Spring-Boot 지원 연결 풀 (현재 HikariCP 또는 Commons DBCP) 중 하나를 사용하는 경우 동일한 방식으로 속성을 설정할 수 있지만 프로젝트를 살펴보아야합니다. 사용 가능한 것을 알 수있는 문서.


답변

현재 버전의 Spring-Boot (1.4.1.RELEASE)에서 각 풀링 데이터 소스 구현에는 속성에 대한 자체 접두사가 있습니다.

예를 들어 tomcat-jdbc를 사용하는 경우 :

spring.datasource.tomcat.max-wait=10000

여기 에서 설명을 찾을 수 있습니다.

spring.datasource.max-wait=10000

이것은 더 이상 효과가 없습니다.


답변

스프링 부트 2.x에서는 공급자 별 속성을 참조해야합니다.

https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-sql.html#boot-features-connect-to-production-database

기본값 인 hikari는로 설정할 수 있습니다 spring.datasource.hikari.maximum-pool-size.


답변

연결 풀마다 구성이 다릅니다.

예를 들어 Tomcat (기본값)은 다음을 예상합니다.

spring.datasource.ourdb.url=...

HikariCP는 다음 사항에 만족합니다.

spring.datasource.ourdb.jdbc-url=...

상용구 구성없이 둘 다 만족시킬 수 있습니다.

spring.datasource.ourdb.jdbc-url=${spring.datasource.ourdb.url}

연결 풀 공급자를 정의하는 속성이 없습니다.

소스 DataSourceBuilder.java 살펴보기

Tomcat, HikariCP 또는 Commons DBCP가 클래스 경로에있는 경우 그중 하나가 선택됩니다 (먼저 Tomcat이있는 순서대로).

… 따라서이 maven 구성 (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>

    <dependency>
        <groupId>com.zaxxer</groupId>
        <artifactId>HikariCP</artifactId>
    </dependency>


답변

애플리케이션 유형 / 크기 / 부하 / 아니오에 따라. 사용자 ..etc-u는 프로덕션 속성으로 계속 팔로우 할 수 있습니다.

spring.datasource.tomcat.initial-size=50
spring.datasource.tomcat.max-wait=20000
spring.datasource.tomcat.max-active=300
spring.datasource.tomcat.max-idle=150
spring.datasource.tomcat.min-idle=8
spring.datasource.tomcat.default-auto-commit=true


답변