Невозможно получить файл свойств 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-сервер.

Другие вопросы по тегам