即使我设置了条件,Spring Cache也不会忽略Null键

时间:2017-03-22 12:39:10

标签: spring caching

在我的应用程序中,缓存键是 nullable ,因此我只想在键不为空时将其放入缓存中。

我尝试了很多不同的方法,但看起来像 Spring Cache 总是想要一个空的空键。否则抛出异常:

  

IllegalArgumentException:为缓存操作返回Null键(可能是   你在没有调试信息的类上使用命名参数?)   Builder [public com.madme.sharding.model.App   com.madme.sharding.service.impl.AppServiceImpl.saveOrUpdateApp(com.madme.sharding.model.App)]   caches = [appsCache] | key ='#result.uuid'| keyGenerator =''|   cacheManager ='redisCacheManager'| cacheResolver =''| condition =''|   除非='#p0.uuid == null'参考:1490185514616_gcfal96

我想如果我在下面指定'除非'条件,它应该忽略这个 CachePut 而不会抛出任何异常。

// I've tried #result.uuid and #p0.uuid, same output
@CachePut(value = APPS_CACHE, cacheManager = "redisCacheManager", key = "#result.uuid", unless = "#result.uuid == null")
public App saveOrUpdateApp(App app) {
    return appRepository.saveAndFlush(app);
}

任何人都有任何想法?

提前致谢。

1 个答案:

答案 0 :(得分:0)

' condition ="#p0.uuid!= null"'工作...没有认识到黑名单('除非')和白名单('条件')没有同时检查。 '条件'在密钥生成之前应用,而除非'之后应用。非常感谢@ M.Deinum