31.1.2 JCache (JSR-107)

类路径下存在javax.cache.spi.CachingProvider(也就是,类路径下存在一个遵循JSR-107的缓存库),并且spring-boot-starter-cache“Starter”提供了JCacheCacheManager,则JCache将启动。这里有很多遵循JSR-107的库,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

由于一个缓存library可能提供的既有native实现,也有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,它将自动包装进org.springframework.cache.CacheManager以实现预期的抽象,也不能对它进一步配置了。