我可以决定是否根据Spring中的输入缓存某些内容吗?

时间:2016-12-26 11:37:46

标签: java spring caching

假设我根据Spring中的请求参数缓存响应。 示例: @Cacheable(value = "personDetails", key = "#personId") public PersonDetails getPersonDetails(String personId) { // Do something }

现在让我们假设某人可以通过“所有人”。也作为personId和我不想缓存它。是否有可能我可以在运行时决定是否根据传递的Input参数缓存这个。请原谅这个例子,但用例相同。

感谢您提前回复:)

2 个答案:

答案 0 :(得分:1)

是的,您可以使用condition属性。

  

有时,某个方法可能不适合一直缓存(例如,它可能取决于给定的参数)。缓存注释通过condition参数支持此类功能,该参数将SpEL表达式计算为truefalse

例如:

@Cacheable(value = "personDetails", key = "#personId", condition="#personId != 'ALL'")
public PersonDetails getPersonDetails(String personId) {
  // Do something
}

您可以在Conditional caching段落下找到here的更多信息。

答案 1 :(得分:0)

您可以使用查询提示并根据条件添加提示。

http://docs.jboss.org/hibernate/stable/entitymanager/reference/en/html/objectstate.html#d0e1215

您可以像setParameter一样使用setHint,如下所示:

.setHint(“org.hibernate.cacheable”, false)