参数值为null时如何在@Cacheable中创建多个缓存键

How to create multiple cache key in @Cacheable when parameter value is null

我正在尝试创建具有多个参数值的缓存键。

@Cacheable(cacheNames = "cache_name_", key = "#name + '_' + #id")
private JSONObject getData(String name, String id) throws Exception {

从上面的场景来看,I name 是必填字段,而 id 是可选的。我想以这样的方式创建密钥,

  1. 如果 name = "test" 且 id = null,缓存键必须是 cache_name_test
  2. 如果 name = "test" 和 id = "2",缓存键必须是 cache_name_test_2

目前,如果没有在参数值中传递 id

,key 正在形成类似 "cache_name_test_null" 的东西

是否可以使用@Cacheable 注释创建这样的密钥?

解决方案

这是可行的,但你需要在一个@Caching注解中包装2个@Cachable注解。

@Caching(
      cacheable = {
            @Cacheable(cacheNames = "cache_name_", key = "#name + '_' + #id", condition = "#id != null"),
            @Cacheable(cacheNames = "cache_name_", key = "#name", condition = "#id == null")
      }
    )
public JSONObject getData(String name, String id) throws Exception {

私有方法注意事项

您正在私有方法上使用@Caching 注释。这是行不通的。这些注释仅适用于从 class 外部调用的 public 方法。请参阅此 Stack Overflow 答案: