如何创建不允许指定密钥缓存的Spring Cache KeyGenerator

问题描述:

我只想为管理员的用户禁用缓存。所以我编写了一个方法来生成密钥,如下所示,管理员返回null。但我得到如何创建不允许指定密钥缓存的Spring Cache KeyGenerator

java.lang.IllegalArgumentException异常:空键返回缓存 操作 exeption。

有什么办法可以实现吗?

//a method that generates a menu for each user 
@Cacheable(cacheNames = "topmenu", keyGenerator = "uiComponentKey") 
@Override 
public String renderResponse() {...} 


//method used by a key generator to generate cache keys. 
@Override 
public Object getCacheKey() { 
    if (user.isAdmin()) { 
     return null; 
    } 
    return user.getUser().getLogin() + "@" + "topmenu"; 
} 

我想你可以使用conditional caching feature达到目的。如下所示:

@Cacheable(cacheNames = "topmenu", condition="#user.isAdmin()") 
@Override 
public String renderResponse(User user) {...} 

请注意,在这种情况下,您将不得不将用户对象传递给此方法。