Spring Cache - Opprette en tilpasset KeyGenerator
1. Oversikt
I denne raske opplæringen skal vi illustrere hvordan du lager en tilpasset nøkkelgenerator med Spring Cache.
For en introduksjon til ovennevnte modul, se denne artikkelen.
2. KeyGenerator
Dette er ansvarlig for å generere hver nøkkel for hvert dataelement i hurtigbufferen, som vil bli brukt til å slå opp dataelementet ved henting.
Standardimplementeringen her er SimpleKeyGenerator - som bruker metodeparametrene som er gitt for å generere en nøkkel. Dette betyr at hvis vi har to metoder som bruker samme hurtigbuffernavn og sett med parametertyper, er det stor sannsynlighet for at det vil resultere i en kollisjon.
Det innebærer også at hurtigbufferdataene kan overskrives med en annen metode.
3. Tilpasset KeyGenerator
EN KeyGeneratortrenger å implementere bare en enkelt metode:
Objektgenererer (Objektobjekt, Metodemetode, Objekt ... params)
Hvis den ikke er implementert eller brukt riktig, kan det føre til overskriving av hurtigbufferdata.
La oss se på implementeringen:
offentlig klasse CustomKeyGenerator implementerer KeyGenerator {public Object genererer (Object target, Method method, Object ... params) {return target.getClass (). getSimpleName () + "_" + method.getName () + "_" + StringUtils. arrayToDelimitedString (params, "_"); }}
Etter det har vi to mulige måter å bruke den på; den første er å erklære en bønne i ApplicationConfig.
Det er viktig å merke seg at klassen må strekke seg fra CachingConfigurerSupport eller implementere CacheConfigurer:
@EnableCaching @Configuration offentlig klasse ApplicationConfig utvider CachingConfigurerSupport {@Bean offentlig CacheManager cacheManager () {SimpleCacheManager cacheManager = ny SimpleCacheManager (); Cache booksCache = ny ConcurrentMapCache ("bøker"); cacheManager.setCaches (Arrays.asList (booksCache)); returner cacheManager; } @Bean ("customKeyGenerator") offentlig KeyGenerator keyGenerator () {returner ny CustomKeyGenerator (); }}
Den andre måten er å bruke den bare for en bestemt metode:
@Component public class BookService {@Cacheable (value = "books", keyGenerator = "customKeyGenerator") public List getBooks () {List books = new ArrayList (); books.add (ny bok ("Counterfeiters", "André Gide")); books.add (ny bok ("Peer Gynt og Hedda Gabler", "Henrik Ibsen")); returnere bøker; }}
4. Konklusjon
I denne artikkelen har vi utforsket en måte å implementere en tilpasset Spring Cache på KeyGenerator.
Som alltid er hele kildekoden til eksemplene tilgjengelig på GitHub.