0

我正在尝试将 Spring BootCacheManager与 Caffeine 和一些带@Cacheable注释的函数一起使用。在我们的测试中,对控制器端点的异步调用遇到的问题似乎与我们使用非异步缓存有关。

在做一些研究时,我看到了很多手动使用 Caffeine 的例子,但是在Spring Boot和注释中CompletableFuture找不到任何东西。它看起来像并且具有非常独特的 API。这可以异步使用默认的 Spring Boot 吗?AsyncCacheLoaderCacheManager@CacheableCacheAsyncCacheCacheManager

谢谢!

4

1 回答 1

1

在 Ben Manes 发表评论后更新答案。您可以将@CacheableSpring Boot Cache Manager 用于响应式Spring Webflux,但在后台,值存储在同步缓存中。这是一个例子

@RestController
@SpringBootApplication
@EnableCaching
public class GatewayApplication {

 @PostMapping(value ="/test", produces = "application/json")
 public Flux<String> handleRequest(@RequestBody String body) {
    return getData(body);
 }

 @Cacheable("cache")
 private Flux<String> getData(String body) {
    return WebClient.create().post()
            .uri("http://myurl")
            .body(BodyInserters.fromObject(body))
            .retrieve().bodyToFlux(String.class).cache();
 }
}

正如您在上面的示例中看到的,它使用 Spring Webflux(Project reactor) 和@Cacheable方法返回异步的 Flux。

AsyncCache如果您想要反应式缓存,您可以直接使用它存储CompleteableFutures

于 2021-10-28T21:30:29.420 回答