Spring Cache - Création d'un KeyGenerator personnalisé

1. Vue d'ensemble

Dans ce tutoriel rapide, nous allons illustrer comment créer un générateur de clé personnalisé avec Spring Cache.

Pour une introduction au module ci-dessus, veuillez vous référer à cet article.

2. KeyGenerator

Il est responsable de la génération de chaque clé pour chaque élément de données dans le cache, qui serait utilisé pour rechercher l'élément de données lors de la récupération.

L'implémentation par défaut ici est SimpleKeyGenerator - qui utilise les paramètres de méthode fournis pour générer une clé. Cela signifie que si nous avons deux méthodes utilisant le même nom de cache et le même ensemble de types de paramètres, il y a une forte probabilité que cela entraîne une collision.

Cela implique également que les données du cache peuvent être écrasées par une autre méthode.

3. Générateur de clés personnalisé

Un KeyGenerator doit implémenter une seule méthode:

Object generate(Object object, Method method, Object... params)

S'il n'est pas implémenté ou utilisé correctement, cela peut entraîner l'écrasement des données du cache.

Regardons l'implémentation:

public class CustomKeyGenerator implements KeyGenerator { public Object generate(Object target, Method method, Object... params) { return target.getClass().getSimpleName() + "_" + method.getName() + "_" + StringUtils.arrayToDelimitedString(params, "_"); } }

Après cela, nous avons deux façons de l'utiliser; le premier est de déclarer un bean dans ApplicationConfig .

Il est important de remarquer que la classe doit s'étendre de CachingConfigurerSupport ou implémenter CacheConfigurer :

@EnableCaching @Configuration public class ApplicationConfig extends CachingConfigurerSupport { @Bean public CacheManager cacheManager() { SimpleCacheManager cacheManager = new SimpleCacheManager(); Cache booksCache = new ConcurrentMapCache("books"); cacheManager.setCaches(Arrays.asList(booksCache)); return cacheManager; } @Bean("customKeyGenerator") public KeyGenerator keyGenerator() { return new CustomKeyGenerator(); } }

La deuxième façon est de l'utiliser uniquement pour une méthode particulière:

@Component public class BookService { @Cacheable(value = "books", keyGenerator = "customKeyGenerator") public List getBooks() { List books = new ArrayList(); books.add(new Book("The Counterfeiters", "André Gide")); books.add(new Book("Peer Gynt and Hedda Gabler", "Henrik Ibsen")); return books; } }

4. Conclusion

Dans cet article, nous avons exploré un moyen d'implémenter le KeyGenerator d' un Spring Cache personnalisé .

Comme toujours, le code source complet des exemples est disponible à l'adresse over sur GitHub.