1. Обзор
В этом кратком руководстве мы проиллюстрируем, как создать пользовательский генератор ключей с помощью Spring Cache.
Для ознакомления с вышеуказанным модулем, пожалуйста, обратитесь к этой статье .
2. Генератор ключей
Это отвечает за создание каждого ключа для каждого элемента данных в кэше, который будет использоваться для поиска элемента данных при извлечении.
По умолчанию здесь используется реализация SimpleKeyGenerator– , которая использует параметры метода, предоставленные для создания ключа. Это означает, что если у нас есть два метода, которые используют одно и то же имя кэша и набор типов параметров, то существует высокая вероятность того, что это приведет к столкновению.
Это также означает, что данные кэша могут быть перезаписаны другим методом.
3. Пользовательский генератор ключей
/| Генератор ключей должен реализовать только один метод:
Object generate(Object object, Method method, Object... params)
Если он не реализован или используется неправильно, это может привести к перезаписи данных кэша.
Давайте посмотрим на реализацию:
public class CustomKeyGenerator implements KeyGenerator { public Object generate(Object target, Method method, Object... params) { return target.getClass().getSimpleName() + "_" + method.getName() + "_" + StringUtils.arrayToDelimitedString(params, "_"); } }
После этого у нас есть два возможных способа его использования; первый-объявление компонента в Application Config .
Важно отметить, что класс должен расширяться из CachingConfigurerSupport или реализовывать Кэш, настроенный :
@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(); } }
Второй способ-использовать его только для определенного метода:
@Component public class BookService { @Cacheable(value = "books", keyGenerator = "customKeyGenerator") public ListgetBooks() { 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. Заключение
В этой статье мы рассмотрели способ реализации Генератора ключей пользовательского кэша Spring .
Как всегда, полный исходный код примеров доступен на GitHub .