[英]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.