微服务架构之Spring Boot(五十四)

2022-05-23 15:37:27 浏览数 (2)

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。

0 人点赞