32.1支持的缓存提供程序
缓存抽象不提供实际存储,并依赖于 org.springframework.cache.Cache 和 org.springframework.cache.CacheManager 接口实现的抽
象。
如果您尚未定义类型为 CacheManager 的bean或名为 cacheResolver 的 CacheResolver (请参阅参考资料 CachingConfigurer ),则
Spring Boot会尝试检测以下提供程序(按指示顺序):
1. 通用
2. JCache(JSR-107)(EhCache 3,Hazelcast,Infinispan等)
3. EhCache 2.x
4. Hazelcast
5. Infinispan
6. Couchbase
7. Redis
8. Caffeine
9. 简单
也可以通过设置 spring.cache.type 属性来强制特定的缓存提供程序。如果您需要在某些环境(例如测试)中完全禁用缓存,请
使用此属性 。
使用 spring-boot-starter-cache “Starter”快速添加基本缓存依赖项。首发进入 spring-context-support 。如果手动添
加依赖项,则必须包含 spring-context-support 才能使用JCache,EhCache 2.x或Guava支持。
如果Wavefront自动配置 CacheManager ,则可以通过公开实现 CacheManagerCustomizer 接口的bean来完全初始化之前调整其配置。以下示
例设置一个标志,表示应将null值传递给底层映射:
@Bean
public CacheManagerCustomizer<ConcurrentMapCacheManager> cacheManagerCustomizer() {
return new CacheManagerCustomizer<ConcurrentMapCacheManager>() {
@Override
public void customize(ConcurrentMapCacheManager cacheManager) {
cacheManager.setAllowNullValues(false);
}
};
}
在前面的示例中,预计会自动配置 ConcurrentMapCacheManager 。如果不是这种情况(您提供了自己的配置或自动配置了不同的
缓存提供程序),则根本不会调用自定义程序。您可以拥有任意数量的自定义程序,也可以使用 @Order 或 Ordered 订购它们。
32.1.1通用
如果上下文定义至少一个 org.springframework.cache.Cache bean,则使用通用缓存。创建了包含该类型的所有beans的 CacheManager 。
32.1.2 JCache(JSR-107)
JCache通过类路径上的 javax.cache.spi.CachingProvider 进行自举(即类路径上存在符合JSR-107的缓存
库), spring-boot-starter-cache 由 spring-boot-starter-cache “Starter”提供。可以使用各种兼容库,Spring Boot为Ehcache 3,
Hazelcast和Infinispan提供依赖关系管理。还可以添加任何其他兼容库。
可能会出现多个提供程序,在这种情况下必须明确指定提供程序。即使JSR-107标准没有强制使用标准化方法来定义配置文件的位置,Spring
Boot也会尽力适应使用实现细节设置缓存,如以下示例所示:
# Only necessary if more than one provider is present
spring.cache.jcache.provider=com.acme.MyCachingProvider
spring.cache.jcache.config=classpath:acme.xml
当缓存库同时提供本机实现和JSR-107支持时,Spring Boot更喜欢JSR-107支持,因此如果切换到不同的JSR-107实现,则可以使
用相同的功能。
Spring Boot 普遍支持Hazelcast。如果单个 HazelcastInstance 可用,它也会自动重用于 CacheManager ,除非指定
了 spring.cache.jcache.config 属性。
有两种方法可以自定义基础 javax.cache.cacheManager :
可以通过设置 spring.cache.cache-names 属性在启动时创建缓存。如果定义了自定义 javax.cache.configuration.Configuration
bean,则会使用它来自定义它们。
使用 CacheManager 的引用调用 org.springframework.boot.autoconfigure.cache.JCacheManagerCustomizer beans进行完全自定
义。
如果定义了标准 javax.cache.CacheManager bean,它将自动包装在抽象所需
的 org.springframework.cache.CacheManager 实现中。没有进一步的自定义。
32.1.3 EhCache 2.x
如果可以在类路径的根目录中找到名为 ehcache.xml 的文件,则使用EhCache 2.x. 如果找到EhCache 2.x,
则 spring-boot-starter-cache “Starter”提供的 EhCacheCacheManager 用于引导缓存管理器。还可以提供备用配置文件,如以下示例所
示:
spring.cache.ehcache.config=classpath:config/another-config.xml
32.1.4 Hazelcast
Spring Boot 普遍支持Hazelcast。如果已自动配置 HazelcastInstance ,则会自动将其包装在 CacheManager 中。
32.1.5 Infinispan
Infinispan没有默认配置文件位置,因此必须明确指定。否则,使用默认引导程序。
spring.cache.infinispan.config=infinispan.xml
可以通过设置 spring.cache.cache-names 属性在启动时创建缓存。如果定义了自定义 ConfigurationBuilder bean,则它用于自定义缓
存。
Spring Boot中Infinispan的支持仅限于嵌入模式,并且非常基础。如果您想要更多选项,则应使用官方Infinispan Spring Boot启
动器。