Spring framework + Hazelcast ,如何enable/disable 使用@Cacheable 注释进行缓存

Spring framework + Hazelcast , how to enable/disable cache using @Cacheable annotation

我正在使用 Spring 框架和 hazelcast 缓存在服务层缓存 REST APi。我正在缓存的 api 具有带有缓存名称和密钥生成器的 @Cacheable 注释,效果很好。我正在寻找使用应用程序 属性 或 consul 属性 进行 enable/disable 缓存的最佳方法。为此,我试图在 @Cachable 注释的条件属性中传递 属性 但不起作用。使用这种方法,我最终将在多个位置传递相同的值(无论我在 API 级别缓存的什么地方)。有没有什么好的方法来处理这样的操作。 作为示例,这里是一个代码片段

@Cacheable(cacheNames = CacheName.MyCache1,keyGenerator = "customKeyGen")
public CachingObject myFirstAPI(String param1, String param2) {
}

这里 hazelcast 缓存将使用 customKeyGen 并放入 myFirstAPI 返回的值 (CachingObject)。如果我必须禁用此操作,我当前的方法是传递一些值(从应用程序 属性 读取)作为条件,以便它在创建缓存之前评估 flag/condition 并仅在条件为true 即缓存已启用,例如

@Cacheable(cacheNames = CacheName.MyCache1,keyGenerator = "customKeyGen", condition="${enableCache}")
public CachingObject myFirstAPI(String param1, String param2) {
}

在我的例子中,我在条件抛出异常时传递的表达式语言,我会找出原因(它当前抛出 SpelEvaluationException,属性 或字段 'enableCache' 无法在对象上找到输入 'org.springframework.cache.interceptor.CacheExpressionRootObject' )

我的问题是,这是 enable/disable 缓存的正确方法吗?请提出建议。

试试 spring.cache.type == none。参见 https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-caching.html#boot-features-caching-provider-none