web-dev-qa-db-ja.com

@EnableCachingを使用したSpringBootを使用したデフォルトのキャッシュマネージャー

以下に示すように、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は何を使用するのでしょうか。

6
PRATHAP S

Spring Bootスターターは 単純なキャッシュプロバイダー を提供します。これは ConcurrentHashMap のインスタンスに値を格納します。これは、キャッシュメカニズムの可能な限り最も単純なスレッドセーフな実装です。

@EnableCachingアノテーションがアプリに存在し、Spring Bootはクラスパスで利用可能な依存関係をチェックし、適切なCacheManagerを構成します。選択したプロバイダーによっては、追加の構成が必要になる場合があります。この回答の最初のリンクで、構成に関するすべての情報を見つけることができます。

7

最も単純なキャッシュマネージャー(内部でConcurrentHashMapを使用)を明示的に(何らかの理由で)定義する場合は、次のようにしてください。

@Bean
public CacheManager cacheManager() {
    return new org.springframework.cache.concurrent.ConcurrentMapCacheManager();
}
1
kasopey