小编典典

使用Spring Cloud Config和Discovery无法获取logback-spring.xml属性文件

spring-boot

我正在使用Discovery的第一个引导程序功能和Consul作为Discovery Server,在启动过程中找到了Config
Server的url,并且能够获得application.properties。我还需要logback- spring.xml从Config服务器获取配置,但我不知道如何。

我应该在logging.config={???}logback-spring.xml属性中指定什么,以免将URL硬编码到Config Server?

在Consul集成之前,我使用的是根据Serving Plain文本文档形成的url,并在属性中使用了硬编码的Config服务器url,它工作正常,但是现在我们要避免这种情况。

根据我的调试,在中重新初始化日志记录系统时没有使用Discovery客户端PropertySourceBootstrapConfiguration


阅读 696

收藏
2020-05-30

共1个答案

小编典典

我使用“ 自定义引导程序配置”以“自定义”的方式解决了我的问题,因为我没有在文档和源代码中找到解决方案。

示例:添加新文件src/main/resources/META- INF/spring.factories并在其中添加自定义引导程序配置:org.springframework.cloud.bootstrap.BootstrapConfiguration=sample.custom.CustomPropertySourceLocator

在CustomPropertySourceLocator中,创建指向配置服务器url的属性(通过发现查找)

@Configuration
public class CustomPropertySourceLocator implements PropertySourceLocator {

  private final String configServiceName;
  private final DiscoveryClient discoveryClient;

  public CustomPropertySourceLocator(
      @Value("${spring.cloud.config.discovery.service-id}") String configServiceName,
      DiscoveryClient discoveryClient){
    this.configServiceName = configServiceName;
    this.discoveryClient = discoveryClient;
  }

  @Override
  public PropertySource<?> locate(Environment environment) {
    List<ServiceInstance> instances = this.discoveryClient.getInstances(this.configServiceName);
    ServiceInstance serviceInstance = instances.get(0);

    return new MapPropertySource("customProperty",
      Collections.singletonMap("configserver.discovered.uri", serviceInstance.getUri()));
  }
}

在上面的代码中,我们创建了将具有一个属性的自定义属性源configserver.discovered.uri。我们可以在代码中(使用@Value)或其他属性文件(即使它们位于config-
server存储中)使用此属性。

logging.config=${configserver.discovered.uri}/<path to the text file>/logback-spring.xml``<path to text file>根据服务纯文本文档以及配置服务器的方式 ,应在何处形成。

2020-05-30