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


81

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

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


더 나은 BoneCP 또는 C3P0 같은 다른 데이터 소스 제공자를 사용하여 찾을
Luiggi 멘도사

3
-Dspring.datasource.tomcat.initial-size=10(기본값은 10)
Christophe Roussy

답변:


122

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

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) 중 하나를 사용하는 경우 동일한 방식으로 속성을 설정할 수 있지만 프로젝트를 살펴보아야합니다. 사용 가능한 것을 알 수있는 문서.


6
있습니다 하나에 명시 적으로 문서 (공교롭게도) : docs.spring.io/spring-boot/docs/current/reference/htmlsingle/...는 . 또한 앱을 시작하고 / configprops (Actuator 포함)를 볼 수 있습니다. 문서화의 문제는 모든 DataSource 구현이 약간 다른 속성을 갖는다는 것입니다 (단지 Java bean에 바인딩하는 것입니다).
Dave Syer 2014-08-29

연결 풀 관련 키워드를 검색 할 때 SEO 친화적이지 않은 @DaveSyer를 지적 해 주셔서 감사합니다. 나는 다른 연결 풀이 다른 구성을 가지고 있다는 것에 동의합니다. 그래서 그것에 대한 섹션을 추가했습니다. 답변을 업데이트하겠습니다.
JBCP

8
Daniel 's 및 wildloop 's와 같은 다른 답변을 참조하십시오. 이후 봄 부팅 버전부터 많은 설정을 사용하려면 공급자 별 설정을 지정해야합니다. 예 : spring.datasource.tomcat.max-active또는 spring.datasource.hikari.maximum-pool-size.
Dan Tanner

내 경우에만 spring.datasource.maxActive=1효과가 있습니다. 이 라인 spring.datasource.max-active=1은 나를 위해 작동하지 않았습니다. Spring Boot 버전2.2.2.RELEASE
Rafael

32

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

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

spring.datasource.tomcat.max-wait=10000

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

spring.datasource.max-wait=10000

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



6

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

예를 들어 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>

3

애플리케이션 유형 / 크기 / 부하 / 아니오에 따라. 사용자 ..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

추가 spring.datasource.tomcat.max-active=5 spring.datasource.tomcat.max-idle=5로 충분했습니다. 감사합니다!
L.Butz
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.