Spring Cache - Создание собственного KeyGenerator
1. обзор
В этом кратком руководстве мы покажем, как создать собственный генератор ключей с помощью Spring Cache.
Для введения в вышеуказанный модуль, пожалуйста, обратитесь кto this article.
2. KeyGeneratorс
Это отвечает за генерацию каждого ключа для каждого элемента данных в кэше, который будет использоваться для поиска элемента данных при извлечении.
Реализация по умолчанию здесь -SimpleKeyGenerator – w, которая использует параметры метода, предоставленные для генерации ключа. Это означает, что если у нас есть два метода, которые используют одно и то же имя кеша и набор типов параметров, то высока вероятность того, что это приведет к конфликту.
Это также означает, что данные кэша могут быть перезаписаны другим методом.
3. ПользовательскийKeyGenerator
KeyGeneratorпытается реализовать только один единственный метод:
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, "_");
}
}
После этого у нас есть два возможных способа его использования; первый объявляет bean-компонент вApplicationConfig.
Важно отметить, что класс должен расширяться отCachingConfigurerSupport или реализовывать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();
}
}
Второй способ - использовать его только для определенного метода:
@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. Заключение
В этой статье мы исследовали способ реализации настраиваемого Spring CacheKeyGenerator.
Как всегда, доступен полный исходный код примеровover on GitHub.