2017-09-13 87 views
0

的KeyGenerator上SPEL鍵不能正常工作,可能我定製的KeyGenerator所有主要包含@Cacheable(key="#spelKey")春天緩存密鑰生成器爲什麼不使用SPEL關鍵

我發現代碼: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); 
    } 
+0

我不明白你的問題的本質是什麼,但有一些文件如何指定不同粒度的鍵。 https://docs.spring.io/spring/docs/current/spring-framework-reference/html/cache.html#cache-annotations-cacheable-key –

+0

@JensSchauder是的,但我想寫入關鍵的目標和方法,如key = [target,method,params] .tojson(),現在自定義密鑰生成器不使用@cacheable(key =#spel) – Dreampie

回答

0

我不知道你想什麼用#spelKey做的,但它是相當記錄。如果你想做一些複雜的事情,我會實現一個KeyGenerator,而不是看到the documentation

+0

如果使用像@Cacheable(key =「#spelKey」),它不能使用KeyGenerater,請參閱 'org.springframework.cache.interceptor.CacheAspectSupport'中的方法'generateKey(Object result)'。 – Dreampie