Не удалось получить файл свойств logback-spring.xml с помощью Spring Cloud Config и Discovery

Я использую функция Discovery first bootstrap и Consul в качестве сервера обнаружения, URL-адрес сервера конфигурации находится во время запуска, и я смог получить application.properties. Мне также нужно получить конфигурацию logback-spring.xml с сервера Config, но я не знаю, как это сделать.

Что я должен указать в свойстве logging.config={???}logback-spring.xml, чтобы не жестко указывать URL-адрес сервера конфигурации?

До интеграции Consul я использовал URL-адрес, сформированный в соответствии с Обслуживание текстовой документации с жестко заданным 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) или в других файлах свойств (даже если они находятся в хранилище конфиг-сервера).

logging.config=${configserver.discovered.uri}/<path to the text file>/logback-spring.xml, где <path to text file> должно быть сформировано в соответствии с Документацией по обслуживанию простого текста и то, как вы настроили свой config-сервер.

person nmyk    schedule 18.04.2018