缓存 webclient 创建是个好主意吗
Is it a good idea to cache webclient creation
我正在使用 spring 网络客户端调用外部 API。我有一个 returns webclient 的构建器。我的问题是,为特定 URL.Below 缓存创建的 webclient 是我的代码的好主意。
@Cacheable(value = "somevalue", cacheManager = "cachemnager", key = "#url")
public WebClient getWebClient(String url, Map<String, String> headers,List<ExchangeFilterFunction> filterFunctions) {
return WebClient.builder()
.baseUrl(url)
.defaultHeaders(addsome headers)
.filters(list -> list.addAll(filterFunctions))
.build();
}
我还必须用不同的 url/params/headers 调用多个 API,所以我也必须创建多个网络客户端。
对我来说是个坏主意因为:
spring-boot 已经为您自动配置了 WebClient.Builder
。它还 pre-configured
default codec 在此构建器中用于转换 HTTP request/reponse to/from 不同类型的 java 对象。自己创建就意味着你需要自己配置这些东西。
如果你真的想这样做,那么使用 spring 缓存抽象就有点矫枉过正了,因为应用程序很可能不需要创建很多 WebClient
JVM 有机会 运行 内存不足。所以你不需要缓存提供的过期和逐出功能,只需要使用一个简单的HashMap
来保持简单。
official docs 强烈建议注入预配置的 WebClient.Builder
来创建和配置 WebClient。所以就跟着它吧。另请参阅文档以获取有关如何执行此操作的示例。
我正在使用 spring 网络客户端调用外部 API。我有一个 returns webclient 的构建器。我的问题是,为特定 URL.Below 缓存创建的 webclient 是我的代码的好主意。
@Cacheable(value = "somevalue", cacheManager = "cachemnager", key = "#url")
public WebClient getWebClient(String url, Map<String, String> headers,List<ExchangeFilterFunction> filterFunctions) {
return WebClient.builder()
.baseUrl(url)
.defaultHeaders(addsome headers)
.filters(list -> list.addAll(filterFunctions))
.build();
}
我还必须用不同的 url/params/headers 调用多个 API,所以我也必须创建多个网络客户端。
对我来说是个坏主意因为:
spring-boot 已经为您自动配置了
WebClient.Builder
。它还pre-configured
default codec 在此构建器中用于转换 HTTP request/reponse to/from 不同类型的 java 对象。自己创建就意味着你需要自己配置这些东西。如果你真的想这样做,那么使用 spring 缓存抽象就有点矫枉过正了,因为应用程序很可能不需要创建很多
WebClient
JVM 有机会 运行 内存不足。所以你不需要缓存提供的过期和逐出功能,只需要使用一个简单的HashMap
来保持简单。
official docs 强烈建议注入预配置的 WebClient.Builder
来创建和配置 WebClient。所以就跟着它吧。另请参阅文档以获取有关如何执行此操作的示例。