-
Notifications
You must be signed in to change notification settings - Fork 1
Open
Description
상황
- WebClient 를 통해 대용량 데이터를 가져오는 경우 아래와 같은 에러 발생
Caused by: org.springframework.core.io.buffer.DataBufferLimitException: Exceeded limit on max bytes to buffer : 262144 at org.springframework.core.io.buffer.LimitedDataBufferList.raiseLimitException(LimitedDataBufferList.java:99) ~[spring-core-5.3.16.jar:5.3.16] Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException:
원인
- Spring boot가 2.2.x, Spring framework : 5.2.x 가 되면서 WebClient에 설정되는 default codec의 buffer size가 변경된 것으로 추정
- 예전엔 아래와 같이 config 를 변경해서 해결할 수 있었으나, default codec 값이 hard coded 되어서 config 로 이제는 수정 불가
spring: codec: max-in-memory-size: 100MB
해결
WebClient빌드 시ExchangeStrategies를 사용하여 codec 을 주입해야 함@Bean fun webClient() = WebClient.builder() .baseUrl(baseUrl) .defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_FORM_URLENCODED_VALUE) .defaultHeader(HttpHeaders.USER_AGENT, "Mozilla/5.0") .exchangeStrategies( ExchangeStrategies.builder() .codecs { configurer -> configurer.defaultCodecs() .maxInMemorySize(-1) // unlimited mem size }.build() ).build()
참고
Reactions are currently unavailable