/**
* 1、通过拦截器的方式修改 RequestOptions 的大小
* 2、通过在请求时进行修改
*/
@Configuration
public class MvcESConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
//设置ElasticsearchRestTemplate查询的最大值为300MB 默认为100MB
registry.addInterceptor(new HandlerInterceptor() {
private boolean isSetBuffer = false;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//已经设置过
if (isSetBuffer) {
return true;
}
//设置es查询buffer大小
RequestOptions requestOptions = RequestOptions.DEFAULT;
Class<? extends RequestOptions> aClass = requestOptions.getClass();
Field aDefault = aClass.getDeclaredField("httpAsyncResponseConsumerFactory");
aDefault.setAccessible(true);
//去除final
Field modifiersField = Field.class.getDeclaredField("modifiers");
modifiersField.setAccessible(true);
modifiersField.setInt(aDefault, aDefault.getModifiers() & ~Modifier.FINAL);
//设置默认的工厂
aDefault.set(requestOptions, new HttpAsyncResponseConsumerFactory() {
@Override
public HttpAsyncResponseConsumer<HttpResponse> createHttpAsyncResponseConsumer() {
//500MB
return new HeapBufferedAsyncResponseConsumer(500 * 1024 * 1024);
}
});
//标记
isSetBuffer = true;
return true;
}
});
}
/**
* 自定义RequestOptions 为 500M ,用这个替换 RequestOptions.DEFAULT
* @return
*/
private RequestOptions updateRequestOptions(){
RequestOptions.Builder builder = RequestOptions.DEFAULT.toBuilder();
builder.setHttpAsyncResponseConsumerFactory(
new HttpAsyncResponseConsumerFactory
//修改为500MB
.HeapBufferedResponseConsumerFactory(500 * 1024 * 1024));
return builder.build();
}
}
12-09
675
12-24
8537
06-01
1132
11-05
632