[Spring] DataBufferLimitException: Exceeded limit on max bytes to buffer : 262144 에러에 대한 해결 책
2020. 5. 3. 17:34
최근 Spring의 버전 업데이트를 했는데 갑자기 WebClient에서 아래와 같은 에러가 발생한다.
org.springframework.core.io.buffer.DataBufferLimitException: Exceeded limit on max bytes to buffer : 262144
at org.springframework.core.io.buffer.LimitedDataBufferList.raiseLimitException(LimitedDataBufferList.java:101) ~[spring-core-5.2.5.RELEASE.jar:5.2.5.RELEASE]
Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException:
사용중인 Spring 버전
- Spring boot : 2.2.6.RELEASE
- Spring framework : 5.2.5.RELEASE
원인
Spring boot가
2.2.x
, Spring framework :5.2.x
가 되면서 WebClient에 설정되는 default codec의 buffer size가 변경된 것 같다.예전에는 아래와 같은 configuration으로 codec의 buffer size를 설정할 수 있었는데 지금은 코드상에 256k로 고정되어 있다. (아직 설정 자체는 남아있음)
spring: codec: max-in-memory-size: 10MB # 현재 설정 안됨.
코드상에 고정되어 있는 부분
해결
위 이슈를 해결하기 위해서는 WebClient를 build할 때 codec쪽 설정을 넣어줘야 한다.
ExchangeStrategies exchangeStrategies = ExchangeStrategies.builder() .codecs(configurer -> configurer.defaultCodecs().maxInMemorySize(-1)) // to unlimited memory size .build(); this.webClient = webClientBuilder .exchangeStrategies(exchangeStrategies) // set exchange strategies .build();
- maxInMemorySize를
-1
로 줄 경우 unlimited이고 10MB같이 고정하고 싶다면10 * 1024 * 1024
와 같이 넣는다.
- maxInMemorySize를
끗
참고 자료
https://stackoverflow.com/questions/59326351/configure-spring-codec-max-in-memory-size-when-using-reactiveelasticsearchclient
https://stackoverflow.com/questions/59735951/databufferlimitexception-exceeded-limit-on-max-bytes-to-buffer-webflux-eroor
https://github.com/spring-projects/spring-framework/issues/23961
'프로그래밍 > spring' 카테고리의 다른 글
[Spring] DataBufferLimitException: Exceeded limit on max bytes per JSON object: 262144 (0) | 2020.07.23 |
---|---|
[Spring] RequestMapping에 path variable에 wildcard 적용하기 (0) | 2020.02.14 |
Profile의 활용 - 서로다른 데이터 소스에 대한 Profile 활용 (0) | 2020.02.06 |
Profile의 활용 - Gradle, Maven Build Profile과 Spring Profile (2) | 2019.12.27 |
Spring Boot 란? (0) | 2016.05.15 |