Spring игнорирует `spring.cloud.config.discovery`, установленный в качестве свойств по умолчанию - PullRequest
0 голосов
/ 21 мая 2018

Я пытаюсь создать приложение Spring без ссылки на какие-либо внешние файлы.Предполагается, что это будет модуль, который вы затем включите в качестве зависимости, сконфигурируете и будете использовать для подключения сервиса к существующей экосистеме.Вот как я это делаю:

Map<String, Object> properties = new HashMap<>();
properties.put("server.address", "0.0.0.0")
properties.put("server.port", 8080)
properties.put("spring.profiles.active", "cloud")
properties.put("spring.application.name", "someApp")
properties.put("spring.cloud.config.failFast", true)
properties.put("spring.cloud.config.discovery.enabled", true)
properties.put("spring.cloud.config.discovery.serviceId", "config")
properties.put("eureka.instance.preferIpAddress", true)
properties.put("eureka.instance.statusPageUrlPath", "/health")

new SpringApplicationBuilder()
  .bannerMode(Banner.Mode.OFF)
  .properties(properties)
  .sources(SpringConfiguration.class)
  .web(false)
  .registerShutdownHook(true)
  .build()

Затем я продолжаю указывать зону Eureka по умолчанию в команде запуска через переменные среды:

--env eureka_client_serviceUrl_defaultZone='http://some-host:8765/eureka/' --env SPRING_CLOUD_CONFIG_LABEL='dev' --env SPRING_CLOUD_INETUTILS_PREFERRED_NETWORKS='10.0'

Приложение успешно регистрируется в Eureka, но, к сожалению, он пытается извлечь конфигурацию до этого и ищет ее по URL-адресу по умолчанию (http://localhost:8888) вместо того, чтобы извлекать IP-адрес сервера конфигурации из реестра.И да, это работает, если я помещу все эти свойства в файл bootstrap.yml.Можно ли как-то заставить его работать без использования файловых ресурсов?

1 Ответ

0 голосов
/ 28 мая 2018

Вы передаете свойства, используя SpringApplicationBuilder, который отвечает за экземпляры SpringApplication и ApplicationContext.

Из документации представленные здесь свойства будут частью ApplicationContext, а не BootstrapContext.ApplicationContext является дочерним элементом BootstrapContext.

Подробнее о контексте Bootstrap вы можете прочитать здесь -

http://cloud.spring.io/spring-cloud-commons/1.3.x/single/spring-cloud-commons.html#_the_bootstrap_application_context

Bootstrap.yml / properties используется для настройки контекста Bootstrap.

Вы можете просмотреть эти свойства, чтобы изменить имя или местоположение файла -

                 spring.cloud.bootstrap.name - bootstrap(default)
                 spring.cloud.bootstrap.location

Вам потребуется использовать файловый ресурс (yml или свойства).

...