我使用Discovery first bootstrap功能和Consul作为发现服务器,在启动期间找到配置服务器的网址,我能够获得application.properties
。我还需要从配置服务器获取logback-spring.xml
配置,我不知道如何。
我应该在logging.config={???}logback-spring.xml
属性中指定什么不将URL硬编码到Config Server?
在Consul集成之前,我使用根据Serving Plain text documentation形成的url和属性中的硬编码配置服务器URL,它工作正常,但现在我们想避免这种情况。
从我调试的内容中,在PropertySourceBootstrapConfiguration
中重新初始化日志记录系统时没有使用Discovery客户端。
答案 0 :(得分:8)
我使用Customizing Bootstrap Configuration在“自定义”中解决了我的问题。因为我没有在文档和源代码中找到解决方案。
示例:添加新文件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
应根据Serving Plain Text Documentation以及配置服务器的方式来形成<path to text file>
。