无法使用 Spring Cloud Config and Discovery 获取 logback-spring.xml 属性 文件
Unable to get logback-spring.xml property file using Spring Cloud Config and Discovery
我正在使用 Discovery first bootstrap 功能和 Consul 作为发现服务器,url 到配置服务器在启动期间找到并且我能够获得 application.properties
。我还需要从配置服务器获取 logback-spring.xml
配置,但我不知道如何获取。
我应该在 logging.config={???}logback-spring.xml
属性 中指定什么才能不将 url 硬编码到配置服务器?
在 Consul 集成之前,我使用的是根据 Serving Plain text documentation 形成的 url,在属性中使用硬编码的配置服务器 url,它工作正常,但现在我们想避免这种情况。
根据我的调试,在 PropertySourceBootstrapConfiguration
中重新初始化日志系统期间没有使用 Discovery 客户端。
我用 Customizing Bootstrap Configuration 以 'custom' 的方式解决了我的问题,因为我没有在文档和源代码中找到解决方案。
示例:添加新文件 src/main/resources/META-INF/spring.factories
并在其中添加自定义 bootstrap 配置: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)或其他 属性 文件(即使它们位于配置服务器存储中)中使用此 属性。
logging.config=${configserver.discovered.uri}/<path to the text file>/logback-spring.xml
其中 <path to text file>
应该根据 Serving Plain Text Documentation 和您配置配置服务器的方式形成。
我正在使用 Discovery first bootstrap 功能和 Consul 作为发现服务器,url 到配置服务器在启动期间找到并且我能够获得 application.properties
。我还需要从配置服务器获取 logback-spring.xml
配置,但我不知道如何获取。
我应该在 logging.config={???}logback-spring.xml
属性 中指定什么才能不将 url 硬编码到配置服务器?
在 Consul 集成之前,我使用的是根据 Serving Plain text documentation 形成的 url,在属性中使用硬编码的配置服务器 url,它工作正常,但现在我们想避免这种情况。
根据我的调试,在 PropertySourceBootstrapConfiguration
中重新初始化日志系统期间没有使用 Discovery 客户端。
我用 Customizing Bootstrap Configuration 以 'custom' 的方式解决了我的问题,因为我没有在文档和源代码中找到解决方案。
示例:添加新文件 src/main/resources/META-INF/spring.factories
并在其中添加自定义 bootstrap 配置: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)或其他 属性 文件(即使它们位于配置服务器存储中)中使用此 属性。
logging.config=${configserver.discovered.uri}/<path to the text file>/logback-spring.xml
其中 <path to text file>
应该根据 Serving Plain Text Documentation 和您配置配置服务器的方式形成。