Spring框架+ Hazelcast,如何使用@Cacheable注释启用/禁用缓存

时间:2017-12-20 09:24:56

标签: spring spring-boot hazelcast distributed-caching

我使用Spring框架和hazelcast缓存来缓存服务层的REST APi。我正在缓存的api有@Cacheable注释与cachename和keygenerator,它工作正常。我正在寻找使用应用程序属性或consul属性启用/禁用缓存的最佳方法。为此,我试图在@Cachable注释的条件属性中传递属性但不起作用。通过这种方法,我最终会在多个位置传递相同的值(无论我在API级别进行缓存)。有没有什么好方法可以处理这种操作。 这里有一个代码片段

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

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

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

在我的情况下,我在条件抛出异常时传递的表达式语言,我将弄清楚为什么(它当前抛出SpelEvaluationException,属性或字段'enableCache'在'org.springframework.cache类型的对象上找不到。 interceptor.CacheExpressionRootObject')

我的问题是,这是启用/禁用缓存的正确方法吗?请建议。