Spring-Boot는 매우 멋진 도구이지만 고급 구성에 관해서는 문서가 약간 드뭅니다. 데이터베이스 연결 풀의 최대 크기와 같은 속성을 어떻게 설정할 수 있습니까?
봄 부팅 지원이 tomcat-jdbc
, HikariCP
그리고 Commons DBCP
기본적으로 모두 동일한 방식으로 구성되어있다?
Spring-Boot는 매우 멋진 도구이지만 고급 구성에 관해서는 문서가 약간 드뭅니다. 데이터베이스 연결 풀의 최대 크기와 같은 속성을 어떻게 설정할 수 있습니까?
봄 부팅 지원이 tomcat-jdbc
, HikariCP
그리고 Commons DBCP
기본적으로 모두 동일한 방식으로 구성되어있다?
-Dspring.datasource.tomcat.initial-size=10
(기본값은 10)
답변:
이러한 구성 속성을 설정하는 것은 매우 간단하지만 공식 문서 가 더 일반적이므로 연결 풀 구성 정보를 구체적으로 검색 할 때 찾기 어려울 수 있습니다.
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.datasource.tomcat.max-active
또는 spring.datasource.hikari.maximum-pool-size
.
spring.datasource.maxActive=1
효과가 있습니다. 이 라인 spring.datasource.max-active=1
은 나를 위해 작동하지 않았습니다. Spring Boot 버전2.2.2.RELEASE
스프링 부트 2.x에서는 공급자 별 속성을 참조해야합니다.
기본값 인 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
spring.datasource.tomcat.max-active=5
spring.datasource.tomcat.max-idle=5
로 충분했습니다. 감사합니다!