通过 spring 缓存中的方法访问返回的数据
Accessing returned data by method in spring cache
我有一个 Person
,其中有 id
和 name
。
当我通过 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 博客。
我有一个 Person
,其中有 id
和 name
。
当我通过 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 博客。