Spring Cache - Creazione di un KeyGenerator personalizzato

1. Panoramica

In questo breve tutorial, illustreremo come creare un generatore di chiavi personalizzato con Spring Cache.

Per un'introduzione al modulo precedente, fare riferimento a questo articolo.

2. KeyGenerator

Questo è responsabile della generazione di ogni chiave per ogni elemento di dati nella cache, che verrebbe utilizzato per cercare l'elemento di dati al momento del recupero.

L'implementazione predefinita qui è SimpleKeyGenerator, che utilizza i parametri del metodo forniti per generare una chiave. Ciò significa che se disponiamo di due metodi che utilizzano lo stesso nome di cache e insieme di tipi di parametri, è molto probabile che si verifichi una collisione.

Implica anche che i dati della cache possano essere sovrascritti da un altro metodo.

3. KeyGenerator personalizzato

Un KeyGenerator deve implementare un solo metodo:

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

Se non è implementato o utilizzato correttamente, può portare alla sovrascrittura dei dati della cache.

Diamo un'occhiata all'implementazione:

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

Dopodiché, abbiamo due possibili modi per usarlo; il primo è dichiarare un bean in ApplicationConfig .

È importante sottolineare che la classe deve estendersi da CachingConfigurerSupport o implementare 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(); } }

Il secondo modo è usarlo solo per un metodo particolare:

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

In questo articolo, abbiamo esplorato un modo per implementare KeyGenerator di Spring Cache personalizzato .

Come sempre, il codice sorgente completo degli esempi è disponibile su GitHub.