source

스프링 부트:최대 연결 수 등의 JDBC 풀 속성을 설정하려면 어떻게 해야 합니까?

factcode 2022. 9. 11. 17:09
반응형

스프링 부트:최대 연결 수 등의 JDBC 풀 속성을 설정하려면 어떻게 해야 합니까?

Spring-Boot은 매우 훌륭한 도구이지만 고급 구성에 관해서는 설명서가 다소 희박합니다.데이터베이스 연결 풀의 최대 크기와 같은 속성을 설정하려면 어떻게 해야 합니까?

스프링 부트 지원tomcat-jdbc,HikariCP그리고.Commons DBCP기본적으로 모두 동일한 방식으로 구성되어 있습니까?

이러한 설정 속성은 매우 간단하게 설정할 수 있습니다만, 공식 문서는 보다 일반적인 것이므로, 접속 풀의 설정 정보를 검색할 때 특히 찾기 어려울 수 있습니다.

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

spring.datasource.maxActive=5

필요에 따라서, 다음을 사용할 수도 있습니다.

spring.datasource.max-active=5

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

이 동작의 일반적인 구조를 이해하려면 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는 클래스 경로에서 일련의 know 클래스를 각각 확인하여 사용할 풀링 라이브러리를 결정합니다.그런 다음 DataSource를 구축하여 데이터 소스를dataSource()기능.

이 시점에서 마법이 발동하여@ConfigurationProperties이 주석은 Spring에게 접두사가 있는 속성을 찾도록 지시합니다.CONFIGURATION_PREFIX(즉,spring.datasource이 프레픽스로 시작하는 각 속성에 대해 Spring은 해당 속성을 사용하여 DataSource의 세터를 호출하려고 합니다.

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

는 「히카리」로 할 수 .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}

연결 풀 제공자를 정의할 속성이 없습니다.

소스 Data Source Builder.java를 확인합니다.

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

...이 때문에, 다음의 maven 설정(maven.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>

어플리케이션 유형/크기/부하/사용자 수에 따라 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

다음과 같이 합니다.

https://docs.spring.io/spring-boot/docs/1.1.2.RELEASE/reference/html/common-application-properties.html

spring.datasource.max-active=100 # Advanced configuration...
spring.datasource.max-idle=8
spring.datasource.min-idle=8

언급URL : https://stackoverflow.com/questions/25573034/spring-boot-how-do-i-set-jdbc-pool-properties-like-maximum-number-of-connection

반응형