31.1 支持的缓存提供商

缓存抽象不提供实际的存储,而是依赖于org.springframework.cache.Cacheorg.springframework.cache.CacheManager接口的实现。只要通过@EnableCaching注解开启缓存支持,Spring Boot就会根据实现自动配置一个合适的CacheManager

如果你使用的缓存设施beans不是基于接口的,确保启用proxyTargetClass,并设置其属性为@EnableCaching

使用spring-boot-starter-cache‘Starter’可以快速添加所需缓存依赖,如果你是手动添加依赖,需要注意一些实现只有spring-context-support jar才提供。

如果你还没有定义一个CacheManager类型的bean,或一个名为cacheResolverCacheResolver(查看CachingConfigurer),Spring Boot将尝试以下提供商(按这个顺序):

  • Generic
  • JCache (JSR-107)(EhCache 3, Hazelcast, Infinispan, etc)
  • EhCache 2.x
  • Hazelcast
  • Infinispan
  • Couchbase
  • Redis
  • Caffeine
  • Guava
  • Simple

    spring.cache.type属性可强制指定使用的缓存提供商,如果需要在一些环境(比如,测试)中禁用全部缓存也可以使用该属性。

    如果CacheManager是Spring Boot自动配置的,你可以在它完全初始化前,通过实现CacheManagerCustomizer接口进一步配置,以下设置使用的缓存name:

    1. @Bean
    2. public CacheManagerCustomizer<ConcurrentMapCacheManager> cacheManagerCustomizer() {
    3. return new CacheManagerCustomizer<ConcurrentMapCacheManager>() {
    4. @Override
    5. public void customize(ConcurrentMapCacheManager cacheManager) {
    6. cacheManager.setCacheNames(Arrays.asList("one", "two"));
    7. }
    8. };
    9. }

    在以上示例中,需要配置一个ConcurrentMapCacheManager,如果没有配置,则自定义器(customizer)将不会被调用。自定义器你添加多少都可以,并可以使用@OrderOrdered对它们进行排序。