Невозможно получить файл свойств logback-spring.xml с помощью Spring Cloud Config и Discovery
Я использую первую загрузочную функцию Discovery и Consul в качестве сервера Discovery, URL-адрес сервера конфигурации находится во время запуска, и я смог получить application.properties
, Мне также нужно получить logback-spring.xml
Конфигурация с сервера Config, и я не знаю, как.
Что я должен указать в logging.config={???}logback-spring.xml
свойство не жестко запрограммировать URL-адрес сервера конфигурации?
До интеграции с Консулом я использовал URL-адрес, сформированный в соответствии с текстовой документацией Serving Plain с жестко запрограммированным URL-адресом сервера конфигурации, и он работал нормально, но теперь мы хотим этого избежать.
Из того, что я отлаживал, нет использования клиента Discovery во время повторной инициализации системы регистрации в PropertySourceBootstrapConfiguration
,
1 ответ
Я использовал " Настройка конфигурации Bootstrap", чтобы решить мою проблему "на заказ", потому что я не нашел решения в документации и исходном коде.
Пример: Добавить новый файл 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>
Должен быть сформирован в соответствии с документацией для обслуживания простого текста и тем, как вы сконфигурировали свой config-сервер.