Spring Cache - Een aangepaste KeyGenerator maken

1. Overzicht

In deze korte tutorial laten we zien hoe je een aangepaste sleutelgenerator kunt maken met Spring Cache.

Raadpleeg dit artikel voor een inleiding op de bovenstaande module.

2. KeyGenerator

Dit is verantwoordelijk voor het genereren van elke sleutel voor elk data-item in de cache, die zou worden gebruikt om het data-item op te zoeken bij het ophalen.

De standaardimplementatie hier is het SimpleKeyGenerator - die de opgegeven methodeparameters gebruikt om een ​​sleutel te genereren. Dit betekent dat als we twee methoden hebben die dezelfde cachenaam en set parametertypes gebruiken, de kans groot is dat dit zal resulteren in een botsing.

Het houdt ook in dat de cachegegevens op een andere manier kunnen worden overschreven.

3. Aangepast KeyGenerator

EEN KeyGeneratorhoeft slechts één enkele methode te implementeren:

Object genereren (Object-object, Method-methode, Object ... params)

Als het niet correct wordt geïmplementeerd of gebruikt, kan dit leiden tot het overschrijven van cachegegevens.

Laten we eens kijken naar de implementatie:

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

Daarna hebben we twee mogelijke manieren om het te gebruiken; de eerste declareert een boon in de ApplicationConfig.

Het is belangrijk op te merken dat de klasse zich moet uitstrekken van CachingConfigurerSupport of implementeren CacheConfigurer:

@EnableCaching @Configuration openbare klasse ApplicationConfig breidt CachingConfigurerSupport uit {@Bean openbare CacheManager cacheManager () {SimpleCacheManager cacheManager = nieuwe SimpleCacheManager (); Cache booksCache = nieuwe ConcurrentMapCache ("boeken"); cacheManager.setCaches (Arrays.asList (booksCache)); terug cacheManager; } @Bean ("customKeyGenerator") openbare KeyGenerator keyGenerator () {retourneer nieuwe CustomKeyGenerator (); }}

De tweede manier is om het alleen voor een bepaalde methode te gebruiken:

@Component openbare klasse BookService {@Cacheable (waarde = "books", keyGenerator = "customKeyGenerator") openbare lijst getBooks () {Lijst boeken = nieuwe ArrayList (); books.add (nieuw boek ("The Counterfeiters", "André Gide")); books.add (nieuw boek ("Peer Gynt en Hedda Gabler", "Henrik Ibsen")); boeken teruggeven; }}

4. Conclusie

In dit artikel hebben we een manier onderzocht om een ​​aangepaste Spring Cache te implementeren KeyGenerator.

Zoals altijd is de volledige broncode van de voorbeelden beschikbaar op GitHub.