如何解决使用EhCache进行Spring Boot缓存不起作用
我正在使用EhCache和Spring Boot缓存来自外部API的HTTP响应,但是该缓存似乎无法正常工作。
我要添加Thread.sleep (2000);
以模拟使用缓存的响应时应跳过的延迟。但这不是,每次调用方法时,都会调用一个延迟和一个外部API。
这是我的缓存配置类
@Configuration
@EnableCaching
public class CacheConfig extends CachingConfigurerSupport {
private static final String TRANSPORT_LOCATIONS = "transportLocations";
private static final int TTL_MILLISECONDS = 15;
@Bean
public net.sf.ehcache.CacheManager ehCacheManager() {
CacheConfiguration transportLocationCache = new CacheConfiguration();
transportLocationCache.setName(TRANSPORT_LOCATIONS);
transportLocationCache.setMaxEntriesLocalHeap(1000);
transportLocationCache.setMemoryStoreevictionPolicy("LRU");
transportLocationCache.setTimetoLiveSeconds(TTL_MILLISECONDS);
net.sf.ehcache.config.Configuration config = new net.sf.ehcache.config.Configuration();
config.addCache(transportLocationCache);
return net.sf.ehcache.CacheManager.newInstance(config);
}
@Bean
@Override
public CacheManager cacheManager() {
return new EhCacheCacheManager(ehCacheManager());
}
}
应缓存的方法
@Cacheable(value = TRANSPORT_LOCATIONS,cacheManager = "cacheManager")
public HttpResponse<String> sendTransportLocationsPostRequest(
final LinkedHashMap<String,Object> bodyStructure,final String url)
throws Exception {
Thread.sleep(2000);
final String body = buildBody(bodyStructure);
final HttpRequest request = buildPostRequest(url,body);
return client.send(request,HttpResponse.BodyHandlers.ofString());
}
您有什么想法,为什么这不起作用?
感谢您的建议。
解决方法
如果未在Cacheable批注中指定键,则所有方法参数都将视为此处发生的键。
键- 默认值为“”,这意味着所有方法参数都被视为键,除非已配置了自定义keyGenerator()。
由于在TRANSPORT_LOCATIONS缓存中只需要一个键,因此可以将方法名称指定为键
@Cacheable(value = TRANSPORT_LOCATIONS,cacheManager = "cacheManager",key = "#root.methodName")
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。