通过spring cache

时间:2018-01-29 14:08:10

标签: java spring-boot caching redis ehcache

我的Personidname

当我按Id搜索时,该方法返回Person对象,我想将name作为缓存键,但返回的数据无法在key标记中找到Cacheable注释name可在unless标记中访问@Cacheable(value = "Cache", key = "#result.name", unless="#result.name == 'Foo'") public Person getById(String id){}

key = "#result.name"

如果我使用key,则会给我例外:

  

EL1007E:在null

上找不到属性或字段'name'

我缺少什么,如何从viewBox标签中的方法访问返回的数据?

2 个答案:

答案 0 :(得分:1)

在您的使用案例中,这是不可能的,因为缓存键是从您传递给方法的参数和String id生成的。因此,Spring尝试从String中提取name参数。这是不可能的。

即使可以将结果名称用作缓存键,缓存也不会像id一样查询。

答案 1 :(得分:0)

缓存键应该从您应用缓存的方法参数生成,并缓存方法的结果。

工作代码将是:

@Cacheable(value = "personCache", key = "#id", unless="#person.name == 'Foo'")
public Person getById(String id){

    Person person = data initialization logic here;
    return person;
}

有关缓存的详细信息,请浏览this链接。

对于某些最佳做法,请点击this博客。