我认为你应该在代码中的某处指定缓存名称。
在基本用法中,缓存名称在 @Cacheable、@CachePut 或 @CacheEvict 注释中给出。
@Cacheable(cacheNames = "myCache")
您还可以在 @CacheConfig 中指定它,这是一个类级注释。
@CacheConfig(cacheNames = "myCache")
如果需要更灵活的缓存机制,可以使用CacheResolver。在这种情况下,您应该创建自己的 CacheResolver。沿着这些思路:
public class CustomCacheResolver implements CacheResolver {
private final CacheManager cacheManager;
public CustomCacheResolver(CacheManager cacheManager){
this.cacheManager = cacheManager;
}
@Override
public Collection<? extends Cache> resolveCaches(CacheOperationInvocationContext<?> context) {
Collection<Cache> caches = new ArrayList<>();
if(context.getTarget().getClass() == GatewayRepository.class){
if(context.getMethod().getName().equals("findByBulkId")){
caches.add(cacheManager.getCache("gatewayCache"));
}
}
return caches;
}
}
本步骤中缓存名称为
网关缓存
它仅在缓存解析器中定义,并且可以在注释端省略。
完成此步骤后,您应该注册 CacheResolver:
@Configuration
@EnableCaching
public class CacheConfiguration extends CachingConfigurerSupport {
@Bean
@Override
public CacheManager cacheManager() {
// Desired CacheManager
}
@Bean
@Override
public CacheResolver cacheResolver() {
return new CustomCacheResolver(cacheManager());
}
}
作为最后一步,您应该在 @Cacheable、@CachePut、@CacheConfig 等注释之一中指定 CustomCacheResolver。
@Cacheable(cacheResolver="cacheResolver")
你可以看here https://github.com/isaolmez/spring-cache-samples对于代码示例