32.1.6 Couchbase
如果Couchbase Java客户端和 couchbase-spring-cache 实现可用并且已配置 Couchbase ,则会自动配置 CouchbaseCacheManager 。通过
设置 spring.cache.cache-names 属性,还可以在启动时创建其他缓存。这些缓存在自动配置的 Bucket 上运行。您可以还通过使用定制创建
另一个 Bucket 额外的缓存。假设你需要两个缓存( cache1 和 cache2 )在“主” Bucket 和一个( cache3 )缓存上,自定义时间为2
秒,“另一个” Bucket 。您可以通过配置创建前两个缓存,如下所示:
spring.cache.cache-names=cache1,cache2
然后,您可以定义 @Configuration 类来配置额外的 Bucket 和 cache3 缓存,如下所示:
@Configuration
public class CouchbaseCacheConfiguration {
private final Cluster cluster;
public CouchbaseCacheConfiguration(Cluster cluster) {
this.cluster = cluster;
}
@Bean
public Bucket anotherBucket() {
return this.cluster.openBucket("another", "secret");
}
@Bean
public CacheManagerCustomizer<CouchbaseCacheManager> cacheManagerCustomizer() {
return c -> {
c.prepareCache("cache3", CacheBuilder.newInstance(anotherBucket())
.withExpiration(2));
};
}
}
此示例配置重用通过自动配置创建的 Cluster 。
32.1.7 Redis
如果Redis可用且已配置,则会自动配置 RedisCacheManager 。通过设置 spring.cache.cache-names 属性可以在启动时创建其他缓存,并且
可以使用 spring.cache.redis.* 属性配置缓存默认值。例如,以下配置创建 cache1 和 cache2 缓存,生存时间为 10分钟:
spring.cache.cache-names=cache1,cache2
spring.cache.redis.time-to-live=600000
默认情况下,会添加一个键前缀,以便在两个单独的缓存使用相同的键时,Redis没有重叠的键,并且不能返回无效值。如果您创
建自己的 RedisCacheManager ,我们强烈建议您启用此设置。
您可以通过添加自己的 RedisCacheConfiguration @Bean 来完全控制配置。如果您正在寻找自定义序列化策略,这可能很有
用。
32.1.8 Caffeine
Caffeine是Java 8重写的Guava缓存,取代了对Guava的支持。如果存在Caffeine,则自动配置 CaffeineCacheManager
(由 spring-boot-starter-cache “Starter”提供)。可以通过设置 spring.cache.cache-names 属性在启动时创建缓存,并且可以通过以
下之一(按指示的顺序)自定义缓存:
1. 由 spring.cache.caffeine.spec 定义的缓存规范
2. 定义了 com.github.benmanes.caffeine.cache.CaffeineSpec bean
3. 定义了 com.github.benmanes.caffeine.cache.Caffeine bean
例如,以下配置创建 cache1 和 cache2 缓存,最大大小为500,生存时间为 10分钟
spring.cache.cache-names=cache1,cache2
spring.cache.caffeine.spec=maximumSize=500,expireAfterAccess=600s
如果定义了 com.github.benmanes.caffeine.cache.CacheLoader bean,它将自动与 CaffeineCacheManager 相关联。由
于 CacheLoader 将与缓存管理器管理的所有缓存关联,因此必须将其定义为 CacheLoader<Object, Object> 。自动配置忽略任何其他泛型类
型。
32.1.9简单
如果找不到其他提供程序,则配置使用 ConcurrentHashMap 作为缓存存储的简单实现。如果您的应用程序中没有缓存库,则这是默认值。默认
情况下,会根据需要创建缓存,但您可以通过设置 cache-names 属性来限制可用缓存列表。例如,如果您只想要 cache1 和 cache2 缓存,请按
如下所示设置 cache-names 属性:
spring.cache.cache-names=cache1,cache2
如果这样做并且您的应用程序使用未列出的缓存,则在需要缓存时它会在运行时失败,但在启动时则不会。这类似于“真实”缓存提供程序在使
用未声明的缓存时的行为方式。
32.1.10 None
当配置中存在 @EnableCaching 时,也需要合适的缓存配置。如果需要在某些环境中完全禁用缓存,请将缓存类型强制为 none 以使用no-op实
现,如以下示例所示:
spring.cache.type=none
33.消息传递
Spring框架为与消息传递系统的集成提供了广泛的支持,从使用 JmsTemplate 的JMS API的简化使用到异步接收消息的完整基础结构。Spring
AMQP为高级消息队列协议提供了类似的功能集。Spring Boot还为 RabbitTemplate 和RabbitMQ提供了自动配置选项。Spring WebSocket
本身包含对STOMP消息传递的支持,Spring Boot通过启动器和少量自动配置支持。Spring Boot也支持Apache Kafka。