通过 spring 缓存中的方法访问返回的数据

Accessing returned data by method in spring cache

我有一个 Person,其中有 idname

当我通过 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" 它会给我异常:

EL1007E: Property or field 'name' cannot be found on null

我错过了什么,如何从 key 标记中的方法访问返回的数据?

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

即使可以使用结果的名称作为缓存键,缓存也不会在您通过 id 查询时工作。

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

工作代码将是:

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

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

有关缓存的更多信息,请参阅 this link。

有关最佳实践,请关注 this 博客。