在我的应用程序中,缓存键是 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);
}
任何人都有任何想法?
提前致谢。
答案 0 :(得分:0)
' condition ="#p0.uuid!= null"'工作...没有认识到黑名单('除非')和白名单('条件')没有同时检查。 '条件'在密钥生成之前应用,而除非'之后应用。非常感谢@ M.Deinum