SpringCache–カスタムKeyGeneratorの作成
1. 概要
このクイックチュートリアルでは、SpringCacheを使用してカスタムキージェネレーターを作成する方法を説明します。
上記のモジュールの概要については、この記事を参照してください。
2. KeyGenerator
これは、キャッシュ内の各データ項目のすべてのキーを生成する役割を果たします。これは、取得時にデータ項目を検索するために使用されます。
ここでのデフォルトの実装は、 SimpleKeyGenerator – であり、キーを生成するために提供されたメソッドパラメーターを使用します。 これは、同じキャッシュ名とパラメータタイプのセットを使用する2つのメソッドがある場合、衝突が発生する可能性が高いことを意味します。
また、キャッシュデータを別の方法で上書きできることも意味します。
3. カスタムKeyGenerator
KeyGenerator は、次の1つのメソッドのみを実装する必要があります。
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, "_");
}
}
その後、2つの使用方法があります。 1つ目は、ApplicationConfigでBeanを宣言することです。
クラスは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();
}
}
2番目の方法は、特定の方法にのみ使用することです。
@Component
public class BookService {
@Cacheable(value = "books", keyGenerator = "customKeyGenerator")
public List<Book> getBooks() {
List<Book> 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. 結論
この記事では、カスタムSpringCacheのKeyGeneratorを実装する方法について説明しました。
いつものように、例の完全なソースコードは、GitHubでから入手できます。