Spring Cache - Oprettelse af en brugerdefineret KeyGenerator

1. Oversigt

I denne hurtige vejledning illustrerer vi, hvordan du opretter en brugerdefineret nøglenerator med Spring Cache.

For en introduktion til ovenstående modul henvises til denne artikel.

2. KeyGenerator

Dette er ansvarlig for at generere hver nøgle for hvert dataelement i cachen, som vil blive brugt til at slå dataelementet op ved hentning.

Standardimplementeringen her er SimpleKeyGenerator - som bruger de angivne metodeparametre til at generere en nøgle. Dette betyder, at hvis vi har to metoder, der bruger det samme cache-navn og sæt parametertyper, er der stor sandsynlighed for, at det vil resultere i en kollision.

Det indebærer også, at cachedataene kan overskrives ved en anden metode.

3. Brugerdefineret KeyGenerator

EN KeyGeneratorskal implementere kun en enkelt metode:

Objektgenerering (Objektobjekt, Metodemetode, Objekt ... parameter)

Hvis det ikke implementeres eller bruges korrekt, kan det føre til overskrivning af cachedata.

Lad os se på implementeringen:

offentlig klasse CustomKeyGenerator implementerer KeyGenerator {public Object genererer (Objektmål, Metodemetode, Objekt ... params) {returner target.getClass (). getSimpleName () + "_" + method.getName () + "_" + StringUtils. arrayToDelimitedString (params, "_"); }}

Derefter har vi to mulige måder at bruge det på; den første erklærer en bønne i ApplicationConfig.

Det er vigtigt at bemærke, at klassen skal strække sig fra CachingConfigurerSupport eller implementere CacheConfigurer:

@EnableCaching @Configuration offentlig klasse ApplicationConfig udvider CachingConfigurerSupport {@Bean public CacheManager cacheManager () {SimpleCacheManager cacheManager = ny SimpleCacheManager (); Cache booksCache = ny ConcurrentMapCache ("bøger"); cacheManager.setCaches (Arrays.asList (booksCache)); returner cacheManager; } @Bean ("customKeyGenerator") offentlig KeyGenerator keyGenerator () {returner ny CustomKeyGenerator (); }}

Den anden måde er at bruge det bare til en bestemt metode:

@Component public class BookService {@Cacheable (value = "books", keyGenerator = "customKeyGenerator") public List getBooks () {List books = new ArrayList (); books.add (ny bog ("Counterfeiters", "André Gide")); books.add (ny bog ("Peer Gynt og Hedda Gabler", "Henrik Ibsen")); returnere bøger; }}

4. Konklusion

I denne artikel har vi undersøgt en måde at implementere en tilpasset Spring Cache på KeyGenerator.

Som altid er den fulde kildekode for eksemplerne tilgængelig på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found