【发布时间】:2021-12-30 07:52:57
【问题描述】:
在我的 Spring Boot 应用程序中,我有一个从外部 API 检索数据的服务。它使用@Scope("prototype"),因为它经常调用几个不同的环境(例如,用于在 x 和 y 之间传输数据)。
@Component
@Scope("prototype")
public class ExternalAppConnection {
private final URI uri;
private final String sessionToken;
public ExternalAppConnection(final String uri, final String sessionToken) {
this.uri = new URI(uri);
this.sessionToken = sessionToken;
}
@Cacheable
public AppInfoResponseDto getAppInfo(Integer appId) {
String url = buildUrl("/api/appinfo" + appId);
return exchangeRequestForObject(url, HttpMethod.GET, AppInfoResponseDto.class);
}
}
如上所示,服务的每个实例都有一个唯一的sessionToken 和uri。不管实例如何,这里的@Cacheable 都会产生相同的缓存,因此在为一个环境调用getAppInfo() 后,如果appId 匹配,我会在为另一个环境调用它时得到一个缓存结果。
是否可以包含每个实例的缓存?我研究过使用CacheResolver,但上下文没有提供有关实例的任何详细信息,例如它的 sessionToken 或 uri。
【问题讨论】:
标签: java spring spring-boot caching