2 votes

Mise à jour du cache Spring

Est-il possible d'avoir l'abstraction de mise en cache de Spring remplir le cache avec un élément donné, plutôt que simplement le lire à travers?

Imaginez que j'ai les méthodes Thing getItem(UUID id) et setItem(UUID id, Thing thing). J'aimerais utiliser @Cacheable sur la première pour la lire à partir du cache, et si elle est absente, appeler la méthode sous-jacente. Lorsque le setter est appelé, j'aimerais que le paramètre thing soit ajouté au cache, puis que la méthode soit appelée, le persistant dans le stockage sous-jacent.

1voto

GokcenG Points 982

Je ne pense pas qu'il soit capable de faire cela. Il vous permet simplement de définir des instances à mettre en cache via @Cachable et de les supprimer via @CacheEvict. À ma connaissance, il n'y a pas d'autre moyen d'interférer avec ce mécanisme de fonctionnement. Vous pouvez également définir une annotation personnalisée pour obtenir la même fonctionnalité.

1voto

Scott Points 2548

Comme l'a indiqué Luciano, vous pourriez définir l'annotation @CachePut sur la méthode, mais comme il le dit, cela vous obligera à modifier votre API. Cela pourrait cependant être un avantage, selon que vous aimez ou non la sémantique que vous obtenez avec le style d'API fluide.

Vous avez cependant une autre option, mais cela vous liera à Spring et rendra votre code setItem un peu plus désagréable. Vous pourriez toujours connecter le CacheManager et définir les données sur le cache lui-même dans la méthode setItem.

Donc, cela ressemblerait à ceci :

@Autowired private CacheManager cacheManager;

public void setItem(UUID id, Thing thing) {
  Cache c = cacheManager.getCache("cacheName");
  if (c != null) {
    c.put(id, thing);   
  }
  //Faire plus
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X