繁体   English   中英

Spring引导可缓存注释 - 每次请求的刷新结果

[英]Spring boot Cacheable annotation — how refresh results on every request

我有一个spring boot应用程序,它向外部Web服务发出大量请求。 我在许多地方使用@Cacheable注释来缓存请求。 我试图找出如何在“每个请求”的基础上缓存请求。 即:

假设我有以下调用外部服务的方法:

@Cacheable
private List<Product> listProducts(String orgCode, String channel, String userToken) {
  return externalService.listProducts(orgCode, channel, userToken);
}

当请求进入我的spring应用程序时,它会调用listProducts方法5次。 外部服务仅调用一次,缓存的结果用于其他4个调用。

现在又有另一个请求,并再次调用listProducts 返回先前缓存的结果。 但是因为这是对我的应用程序的新请求,我想刷新结果。

我觉得@Cacheable有一个参数,我只是没有找到。

最好的方法是创建一个Web Filter以清除缓存。 查看@CacheEvict(allEntries=true) ,您可以注释另一个方法并在Filter中调用它。

过滤器可能如下所示:

@Component
public class CacheEvictFilter implements Filter {

    private final MyService myService;

    public CacheEvictFilter(final MyService myService) {
        this.myService = myService;
    }

    @Override
    public void doFilter(
      ServletRequest request, 
      ServletResponse response, 
      FilterChain chain
    ) throws IOException, ServletException 
    {
        chain.doFilter(request, response);

        myService.evictProducts();
    }

    // other methods
}

evictProducts方法可能如下所示:

@CacheEvict(allEntries=true)
public void evictProducts() {
    log.info("Evicted all products")
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM