2017-09-13 6 views
0

KeyGenerator fonctionne pas sur la touche Spel, puis-je KeyGenerator sur mesure pour toutes les clés contient @Cacheable(key="#spelKey")générateur de clé de cache de printemps pourquoi ne pas utiliser la touche Spel

J'ai trouvé le code: 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); 
     } 
    } 

code de changement comme:

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

Je ne comprends pas l'essence de votre question, mais il y a de la documentation sur la manière de spécifier des clés avec une granularité variée. https://docs.spring.io/spring/docs/current/spring-framework-reference/html/cache.html#cache-annotations-cacheable-key –

+0

@JensSchauder oui, mais je veux écrire la cible et la méthode dans la clé, comme key = [cible, méthode, params] .tojson(), maintenant générateur de clé personnalisée ne pas utiliser de @cacheable (clé = # spel) – Dreampie

Répondre

0

Je ne suis pas sûr de ce que vous essayez de faire avec #spelKey mais il est assez documenté. Si vous voulez faire quelque chose de complexe, j'implémenterais un KeyGenerator à la place, voir the documentation

+0

si l'utilisation comme '@Cacheable (key =" # spelKey ")', il ne peut pas utilisez KeyGenerater, veuillez voir la méthode 'generateKey (Résultat de l'objet)' dans 'org.springframework.cache.interceptor.CacheAspectSupport' – Dreampie