Java Ehcache-Spring-自定义密钥生成器
我当时正在使用,遇到了以下情况: 我有一个简单的POJO,如下所示Java Ehcache-Spring-自定义密钥生成器,java,spring,annotations,ehcache,Java,Spring,Annotations,Ehcache,我当时正在使用,遇到了以下情况: 我有一个简单的POJO,如下所示 class Person{ private Long id; private String name //some code } 现在在道我有 public Person getPerson(Long personId){} public Person UpdatePerson(Person person){} 现在在updateperson中,我需要类person的参数,并且我需要使用person的personId
class Person{
private Long id;
private String name
//some code
}
现在在道我有
public Person getPerson(Long personId){}
public Person UpdatePerson(Person person){}
现在在updateperson中,我需要类person的参数,并且我需要使用person的personId作为缓存的键
这可以通过为每个类实现或放置if/else块来实现,但是我们可以提供一些可配置的东西来给参数字段作为键吗?这都可以通过注释来完成 如果
updatePerson
方法采用了您正在持久化的修改后的Person
,则需要使用TriggersRemove
对更新方法进行注释,以将更新后的Person从缓存中逐出。然后需要重新运行getPerson
方法来缓存更新的Person
请参见网站上的示例代码:
基于上面链接中的updatewather
方法,如果我理解手头的问题,您可以执行以下操作:
@Cacheable(cacheName="personCache", keyGenerator=@KeyGenerator(
name="ListCacheKeyGenerator",properties=@Property(name="includeMethod",value="false")))
public Weather getPerson(Long personId) {
return (Person)(getSession().get(Person.class, personId));
}
@TriggersRemove(cacheName="personCache", keyGenerator=@KeyGenerator(
name="ListCacheKeyGenerator",properties=@Property(name="includeMethod",value="false")))
public Weather updatePerson(@PartialCacheKey Long personId, Person person) {
getSession().merge(person);
return getPerson(personId);
}
这一切都可以通过注释来完成 如果
updatePerson
方法采用了您正在持久化的修改后的Person
,则需要使用TriggersRemove
对更新方法进行注释,以将更新后的Person从缓存中逐出。然后需要重新运行getPerson
方法来缓存更新的Person
请参见网站上的示例代码:
基于上面链接中的updatewather
方法,如果我理解手头的问题,您可以执行以下操作:
@Cacheable(cacheName="personCache", keyGenerator=@KeyGenerator(
name="ListCacheKeyGenerator",properties=@Property(name="includeMethod",value="false")))
public Weather getPerson(Long personId) {
return (Person)(getSession().get(Person.class, personId));
}
@TriggersRemove(cacheName="personCache", keyGenerator=@KeyGenerator(
name="ListCacheKeyGenerator",properties=@Property(name="includeMethod",value="false")))
public Weather updatePerson(@PartialCacheKey Long personId, Person person) {
getSession().merge(person);
return getPerson(personId);
}
你能切换到Spring 3.1吗 您的用例可以通过以下方式轻松解决:
@Cacheable(key="#person.personId")
注释。能否切换到Spring 3.1 您的用例可以通过以下方式轻松解决:
@Cacheable(key="#person.personId")
注释。尝试将@PartialCacheKey添加到getPerson方法的personId参数中 就这样,
@Cacheable(cacheName="personCache", keyGenerator=@KeyGenerator(
name="ListCacheKeyGenerator",properties=@Property(name="includeMethod",value="false")))
public Weather getPerson(@PartialCacheKey Long personId) {
return (Person)(getSession().get(Person.class, personId));
}
@TriggersRemove(cacheName="personCache", keyGenerator=@KeyGenerator(
name="ListCacheKeyGenerator",properties=@Property(name="includeMethod",value="false")))
public Weather updatePerson(@PartialCacheKey Long personId, Person person) {
getSession().merge(person);
return getPerson(personId);
}
尝试将@PartialCacheKey添加到getPerson方法的personId参数中 就这样,
@Cacheable(cacheName="personCache", keyGenerator=@KeyGenerator(
name="ListCacheKeyGenerator",properties=@Property(name="includeMethod",value="false")))
public Weather getPerson(@PartialCacheKey Long personId) {
return (Person)(getSession().get(Person.class, personId));
}
@TriggersRemove(cacheName="personCache", keyGenerator=@KeyGenerator(
name="ListCacheKeyGenerator",properties=@Property(name="includeMethod",value="false")))
public Weather updatePerson(@PartialCacheKey Long personId, Person person) {
getSession().merge(person);
return getPerson(personId);
}
你能切换到Spring 3.1吗?然后通过
@Cacheable(key=“#person.personId”)
annotation@Tomasz让我看看。thanks@Tomasz成功了。我切换到Spring Cachable Abstraction很高兴我能帮上忙,我将我的评论提升为一个答案,如果你觉得它有用的话。你能切换到Spring 3.1吗?然后通过@Cacheable(key=“#person.personId”)
annotation@Tomasz让我看看。thanks@Tomasz成功了。我切换到Spring Cachable Abstraction很高兴我能帮上忙,我把我的评论提升为一个答案,如果你觉得有用的话;上面链接的代码是您正在使用的lib的官方示例代码。您链接的代码不能解决我的问题。我删除该注释,因为我认为我误解了它。对不起。但是你的答案仍然不能回答我的问题,或者如果你认为它能回答,而我没有得到答案,请详细说明,并作出回应,这才是真正的问题所在。为了更新Pojo,我们需要传递两个不同的参数,这是一个大胆的声明;上面链接的代码是您正在使用的lib的官方示例代码。您链接的代码不能解决我的问题。我删除该注释,因为我认为我误解了它。对不起。但是你的答案仍然不能回答我的问题,或者如果你认为它能回答,而我没有得到答案,请详细说明,并作出回应,这才是真正的问题所在。为了更新Pojo,我们需要以不同的方式传递两个参数