【发布时间】:2017-09-13 09:53:42
【问题描述】:
keyGenerator 不适用于 spel 键,我可以为所有包含 @Cacheable(key="#spelKey") 的键自定义 keyGenerator
我找到了代码:org.springframework.cache.interceptor.CacheAspectSupport
protected Object generateKey(Object result) {
if (StringUtils.hasText(this.metadata.operation.getKey())) {
EvaluationContext evaluationContext = this.createEvaluationContext(result);
return CacheAspectSupport.this.evaluator.key(this.metadata.operation.getKey(), this.methodCacheKey, evaluationContext);
} else {
return this.metadata.keyGenerator.generate(this.target, this.metadata.method, this.args);
}
}
修改代码如下:
protected Object generateKey(Object result) {
if (StringUtils.hasText(this.metadata.operation.getKey())) {
EvaluationContext evaluationContext = createEvaluationContext(result);
return this.metadata.keyGenerator.generate(this.target, this.metadata.method, evaluator.key(this.metadata.operation.getKey(), this.methodCacheKey, evaluationContext));
}
return this.metadata.keyGenerator.generate(this.target, this.metadata.method, this.args);
}
【问题讨论】:
-
我不明白你的问题的本质是什么,但是有一些文档如何指定具有各种粒度的键。 docs.spring.io/spring/docs/current/spring-framework-reference/…
-
@JensSchauder 是的,但我想将目标和方法写入密钥,如 key=[target,method,params].tojson(),现在自定义密钥生成器不使用 @cacheable(key=#拼写)
标签: spring spring-boot spring-cache