2015-04-22 73 views
0

继@Cacheable注释如何在缓存中未找到@Cacheable时返回null,但不缓存结果?

@Cacheable(value="books", key="#isbn") 
public Book findBook(ISBN isbn, boolean checkWarehouse, boolean includeUsed) 
  • 查找的基础上,重点
  • 缓存如果发现从缓存中返回结果
  • 如果没有找到评估方法
  • 更新缓存
  • 返回结果

因此,下次使用相同参数调用此方法时,它将从缓存中获取。

我想要的,而不是仅仅是

  • 基于关键
  • 缓存中查找,如果找到返回从缓存中
  • 如果没有找到返回NULL

我的结果不想更新高速缓存的情况下的高速缓存未命中,有没有办法做到这一点使用春注释

+1

这是不是真的用例为'@ Cacheable'注解,这是不是一个真正的常见情况好,所以我猜你不能用Spring注释来做这件事,而且你必须自己编写一个'findBookInCache(ISBN isbn)'方法。 – beerbajay

回答

4

这里是我结束了,诀窍是使用“除非”是我们的优势

@Cacheable(value="books", key="#isbn", unless = "#result == null") 
public Book findBookFromCache(ISBN isbn, boolean checkWarehouse, boolean includeUsed) 
{ 
    return null; 
} 

这种方法

  • 基于关键
  • 缓存中查找,如果找到返回的结果from cache
  • if not found评估返回null的方法
  • 返回值与条件相匹配(总是返回true)
  • 空值没有得到缓存
  • 返回null值对来电者
+0

嗨,我有一个场景,其中结果来作为例外,除非在我的代码中未配置。所以导致的异常被缓存到服务器。如何使用“除非”来防止这种情况?我可以配置内部例外吗? – nijogeorgep