Spring Cloud 微服务启动警告如下:
2021-12-08 11:51:01.511 [main] WARN org.springframework.cloud.loadbalancer.config.LoadBalancerCacheAutoConfiguration$LoadBalancerCaffeineWarnLogger-Spring Cloud LoadBalancer is currently working with the default cache. You can switch to using Caffeine cache, by adding it and org.springframework.cache.caffeine.CaffeineCacheManager to the classpath.
翻译:
Spring Cloud LoadBalancer 当前正在使用默认缓存。 您可以切换到使用 Caffeine 缓存,方法是将它和 org.springframework.cache.caffeine.CaffeineCacheManager 添加到类路径。
2021-12-08 11:51:21.128 [http-nio-8300-exec-2] WARN org.springframework.cloud.loadbalancer.core.ServiceInstanceListSupplierBuilder-LoadBalancerCacheManager not available, returning delegate without caching.
翻译:
LoadBalancerCacheManager 不可用,不缓存就返回委托。
谷歌查询:
如何解决“Spring Cloud LoadBalancer 当前正在使用默认缓存。您可以切换到使用 Caffeine 缓存”警告?
官网配置:
亲测操作:
引入Caffeine依赖:
<!-- https://mvnrepository.com/artifact/com.github.ben-manes.caffeine/caffeine -->
<dependency>
<groupId>com.github.ben-manes.caffeine</groupId>
<artifactId>caffeine</artifactId>
<version>3.0.5</version>
</dependency>
Spring Boot 配置:
spring:
#spring cloud 配置
cloud:
# 负载均衡器缓存
loadbalancer:
cache:
enabled: true
caffeine:
spec: initialCapacity=500,expireAfterWrite=5s
此配置非必要,若不配置则使用默认配置:
package org.springframework.cloud.loadbalancer.cache;
import com.github.benmanes.caffeine.cache.Caffeine;
import org.springframework.cache.caffeine.CaffeineCacheManager;
import org.springframework.cloud.loadbalancer.core.CachingServiceInstanceListSupplier;
import org.springframework.util.StringUtils;
public class CaffeineBasedLoadBalancerCacheManager extends CaffeineCacheManager implements LoadBalancerCacheManager {
public CaffeineBasedLoadBalancerCacheManager(String cacheName, LoadBalancerCacheProperties properties) {
super(new String[]{cacheName});
if (!StringUtils.isEmpty(properties.getCaffeine().getSpec())) {
this.setCacheSpecification(properties.getCaffeine().getSpec());
} else {
this.setCaffeine(Caffeine.newBuilder().initialCapacity(properties.getCapacity()).expireAfterWrite(properties.getTtl()).softValues());
}
}
public CaffeineBasedLoadBalancerCacheManager(LoadBalancerCacheProperties properties) {
this(CachingServiceInstanceListSupplier.SERVICE_INSTANCE_CACHE_NAME, properties);
}
}
其中this.setCaffeine(Caffeine.newBuilder().initialCapacity(properties.getCapacity()).expireAfterWrite(properties.getTtl()).softValues());
就是使用默认的缓存配置信息对Caffeine进行配置