以下に示すように、SpringBootApplicationにキャッシュを実装しました
@SpringBootApplication
@EnableCaching
public class SampleApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(SampleApplication.class);
}
public static void main(String[] args) {
SpringApplication.run(SampleApplication.class, args);
}
これは完全に正常に機能しています。
ただし、キャッシュを実装するには、必須のCacheManager/Cacheproviderを1つ定義する必要があります。 cacheManagerを定義しなくても、私のアプリケーションは正常に動作しています。
Springで定義されているデフォルトのキャッシュマネージャーはありますか? Springのドキュメントによると、SpringBootは適切なCacheManagerを自動構成します。
では、定義しない場合、CacheManagerは何を使用するのでしょうか。
Spring Bootスターターは 単純なキャッシュプロバイダー を提供します。これは ConcurrentHashMap のインスタンスに値を格納します。これは、キャッシュメカニズムの可能な限り最も単純なスレッドセーフな実装です。
@EnableCaching
アノテーションがアプリに存在し、Spring Bootはクラスパスで利用可能な依存関係をチェックし、適切なCacheManager
を構成します。選択したプロバイダーによっては、追加の構成が必要になる場合があります。この回答の最初のリンクで、構成に関するすべての情報を見つけることができます。
最も単純なキャッシュマネージャー(内部でConcurrentHashMapを使用)を明示的に(何らかの理由で)定義する場合は、次のようにしてください。
@Bean
public CacheManager cacheManager() {
return new org.springframework.cache.concurrent.ConcurrentMapCacheManager();
}