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

问题描述 投票:0回答:2

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

我尝试了很多不同的方法,但看起来

Spring Cache 总是想要一个非空键。否则会抛出异常:

IllegalArgumentException:缓存操作返回空键(可能 您在没有调试信息的类上使用命名参数?) 生成器[public com.madme.sharding.model.App com.madme.sharding.service.impl.AppServiceImpl.saveOrUpdateApp(com.madme.sharding.model.App)] 缓存=[appsCache] | key='#result.uuid' |密钥生成器='' | 缓存管理器='redisCacheManager'|缓存解析器='' |条件='' | 除非='#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); }

有人有什么想法吗?

提前致谢。

spring caching
2个回答
3
投票
'condition="#p0.uuid != null"' 有效...没有意识到黑名单('除非')和白名单('条件')没有同时检查。 “条件”在密钥生成之前应用,而“除非”在密钥生成之后应用。非常感谢@M.Deinum


0
投票
像这个例子一样使用

@Cacheable(value = "panDetailsCache", key = "#panMasterData.data?.idNumber ?: 'defaultKey'") 公共字符串 getPANDetails(PanMasterData panMasterData) 抛出 InterruptedException { // ...您获取 PAN 详细信息的逻辑... }

© www.soinside.com 2019 - 2024. All rights reserved.