Spring Cache - Erstellen eines benutzerdefinierten KeyGenerators

1. Übersicht

In diesem kurzen Tutorial zeigen wir Ihnen, wie Sie mit Spring Cache einen benutzerdefinierten Schlüsselgenerator erstellen.

Eine Einführung in das obige Modul finden Sie in diesem Artikel.

2. KeyGenerator

Dies ist dafür verantwortlich, jeden Schlüssel für jedes Datenelement im Cache zu generieren, der zum Nachschlagen des Datenelements beim Abrufen verwendet wird.

Die Standardimplementierung ist hier der SimpleKeyGenerator, der die bereitgestellten Methodenparameter zum Generieren eines Schlüssels verwendet. Dies bedeutet, dass bei zwei Methoden, die denselben Cache-Namen und denselben Parametertyp verwenden, eine hohe Wahrscheinlichkeit besteht, dass dies zu einer Kollision führt.

Dies bedeutet auch, dass die Cache-Daten durch eine andere Methode überschrieben werden können.

3. Benutzerdefinierter KeyGenerator

Ein KeyGenerator muss nur eine einzige Methode implementieren:

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

Wenn es nicht korrekt implementiert oder verwendet wird, kann es zum Überschreiben von Cache-Daten führen.

Schauen wir uns die Implementierung an:

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

Danach haben wir zwei Möglichkeiten, es zu verwenden; Das erste ist das Deklarieren einer Bean in der ApplicationConfig .

Es ist wichtig zu beachten , dass die Klasse von CachingConfigurerSupport erweitert oder CacheConfigurer implementiert werden muss :

@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(); } }

Der zweite Weg ist, es nur für eine bestimmte Methode zu verwenden:

@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. Fazit

In diesem Artikel haben wir eine Möglichkeit untersucht, den KeyGenerator eines benutzerdefinierten Spring Cache zu implementieren .

Wie immer ist der vollständige Quellcode der Beispiele auf GitHub verfügbar.