欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

Spring Cloud微服务启动时遇到缓存无法使用警告,问题解决方法探析

最编程 2024-02-17 16:09:38
...

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 缓存”警告?

官网配置:

Spring Cloud LoadBalancer 缓存

亲测操作:

引入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进行配置