Mantén la atención porque en esta crónica vas a hallar la solución que buscas.
Solución:
Usando la reacción simple WebClient
Me encontré con el mismo problema (pasando de 2.1.9 a 2.2.1.) No tuve suerte al configurar spring.codec.max-in-memory-size
y luego encontré una pista de que este no era el camino a seguir de todos modos:
… En el lado del cliente, el límite se puede cambiar en WebClient.Builder.
(fuente, incluido el enlace muerto :-S)
todavia no he averiguado donde WebClient.Builder
obtiene el límite predeterminado de 256 K1. Sin embargo, lo siguiente me permitió aumentar el límite de tamaño del búfer a 16M:
WebClient.builder()
.…
.exchangeStrategies(ExchangeStrategies.builder()
.codecs(configurer -> configurer
.defaultCodecs()
.maxInMemorySize(16 * 1024 * 1024))
.build())
.build();
Entonces, me parece (sin conocer las complejidades de spring-data-elasticsearch
) que si de alguna manera puedes poner tus manos en el WebClient
como regresado de la WebClientProvider
deberías poder mutarlo para incluir el ExchangeStrategies
desde arriba.
Tal vez pueda proporcionar su propia anulación de DefaultWebClientProvider
a lo largo de las líneas de (¡absolutamente no probado!):
class MyDefaultWebClientProvider extends DefaultWebClientProvider
@Override
public WebClient get(InetSocketAddress endpoint)
return super.get(endpoint)
.mutate() // Obtain WebClient.Builder instance.
.exchangeStrategies(ExchangeStrategies.builder()
.codecs(configurer -> configurer
.defaultCodecs()
.maxInMemorySize(16 * 1024 * 1024))
.build())
.build();
YMMV.
ACTUALIZACIÓN #1:
1) Ahora lo encontré. Y explica por qué establecer spring.codec.max-in-memory-size
no tiene efecto; la propiedad está codificada en 256K en la clase base que usan todos los códecs predeterminados, cf. BaseDefaultCodecs
.
Hace un par de días implementé la posibilidad de personalizar el WebClient
, verifique el problema de Jira correspondiente. Estará disponible en Spring Data Elasticsearch 3.2.4 y ya se encuentra en la rama maestra actual.
El código de configuración se ve así:
@Configuration
public class ReactiveRestClientConfig extends AbstractReactiveElasticsearchConfiguration
@Override
public ReactiveElasticsearchClient reactiveElasticsearchClient()
final ClientConfiguration clientConfiguration = ClientConfiguration.builder() //
.connectedTo("localhost:9200") //
.withWebClientConfigurer(webClient ->
ExchangeStrategies exchangeStrategies = ExchangeStrategies.builder()
.codecs(configurer -> configurer.defaultCodecs()
.maxInMemorySize(-1))
.build();
return webClient.mutate().exchangeStrategies(exchangeStrategies).build();
)
.build();
return ReactiveRestClients.create(clientConfiguration);