Spring Cloud Configuration Server не работает с локальным файлом свойств

Я играл с проектом Spring Cloud на github, расположенном здесь: https://github.com/spring-cloud/spring-cloud-config

Однако я столкнулся с некоторыми проблемами, заставляя его читать файл локальных свойств вместо того, чтобы извлекать свойства из github. Кажется, что Spring игнорирует локальный файл, даже когда я удаляю все ссылки на github. Здесь размещен похожий вопрос: сервер конфигурации Spring-Cloud игнорирует файл свойств конфигурации

Но я еще не видел хороших ответов. Мне интересно, может ли кто-нибудь указать мне на пример этого? Я хотел бы установить свои свойства локально, а не использовать git-репо любого вида. Я предполагаю, что кто-то сталкивался с этим раньше, и если где-то есть пример этого, я действительно хотел бы увидеть это, чтобы я мог двигаться в правильном направлении.

11 ответов

Решение

Весь мой код здесь https://github.com/spencergibb/communityanswers/tree/so27131143

SRC / Основной / Java/Application.java

@Configuration
@EnableAutoConfiguration
@EnableConfigServer
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

SRC / главная / ресурсы / application.yml

spring:
  application:
     name: myconfigserver
  profiles:
     active: native

my:
  property: myvalue

SRC / главная / ресурсы / myapp.yml

my:
  otherprop: myotherval

Чтобы получить свойства для приложения с именем myapp, сделайте следующее.

curl http://localhost:8080/myapp/default

{
     "name": "default",
     "label": "master",
     "propertySources": [
          {
                "name": "applicationConfig: [classpath:/myapp.yml]",
                "source": {
                     "my.otherprop": "myotherval"
                }
          },
          {
                "name": "applicationConfig: [classpath:/application.yml]",
                "source": {
                     "spring.application.name": "myconfigserver",
                     "spring.profiles.active": "native",
                     "my.property": "myvalue"
                }
          }
     ]
}

Я могу прочитать конфигурацию для apple-сервиса (Test Micro Service), используя конфигурационный сервер Spring.

Пример application.yml весеннего конфигурационного приложения

spring:
    profiles:
        active: native
    cloud:
        config:
            server:
                native:
                    searchLocations: classpath:config/
server:
  port: 8888


endpoints:
    restart:
      enabled: true

Поместите ваши.properties или.yml файлы в папку src \ main \ resources \ config. Убедитесь, что имена этих файлов совпадают с spring.application.name вашего микросервиса.

Например, если spring.application.name=apple-service, тогда файл свойств должен быть apple-service.properties в папке src \ main \ resources \ config.

Пример bootstrap.yml яблочного сервиса:

spring:
  application:
    name: apple-service

cloud:
  config:
    uri: http://localhost:8888

Вот что я сделал:

следующие https://medium.com/@danismaz.furkan/spring-cloud-config-with-file-system-backend-c18ae16b7ad5

1)!! не забывайте свои параметры виртуальной машины!!:

-Dspring.profiles.active=native

(в Netbeans: configserver-> project-> properties> Run-> VM options

2) Либо в application.properties

#spring.cloud.config.server.native.searchLocations=file:///C:/tmp/config

spring.cloud.config.server.native.searchLocations=classpath:/config

или applications.yml

spring:

    cloud:

         config:

            server:

                native:

                    search-locations  : file:///C:/tmp/config
                    #search-locations : classpath:/config

Заметки:

n1: search-location и searchLocations работают

n2: file:/// => жесткий путь к файлу

подобно

c:/temp/config/
           app-admin.yml
           app-admin-develop.yml
           .... 

n3: для файлов конфигурации вашего профиля

путь к классам: /

подобно

Other sources/src/main/resources/config/app-admin.yml

n4: Я не мог заставить пути к файлам работать без настройки параметров vm. Не забывай! Просто установка spring.profiles.active=native в конфигурации вашего приложения не поможет мне

n5: пример http-запросов

http: // локальный: 8998 / приложение-админ / по умолчанию / yml

дает app-admin.yml

http: // локальный: 8998 / приложение-админ / разработка / yml

дает app-admin-develop.yml

Использование spring.profiles.active=native - это то, что, похоже, предлагает документация Spring, но я также не смог заставить его работать. Мой файл application.properties

server.port=8888
spring.cloud.config.profiles=native 

но ответ с URL

http://localhost:8888/config-server/env

является

{"name":"env","label":"master","propertySources":[{"name":"https://github.com/spring-cloud-samples/config-repo/application.yml","source":{"info.url":"https://github.com/spring-cloud-samples","info.description":"Spring Cloud Samples"}}]}

что указывает на то, что собственный профиль был проигнорирован, а сервер все еще рассматривает github в качестве источника свойств.

Небольшая дополнительная проблема, с которой я столкнулся, это порт службы конфигурации по умолчанию. Согласно документации Sprin Cloud Config это должно быть 8888. Если я удаляю server.port = 8888 из моего application.properties, сервер конфигурации запускается на порту 8080, который является портом Spring Boot по умолчанию, но не тот сервер конфигурации, который должен использовать.

У меня была такая же проблема при запуске сервера конфигурации в среде Mac OS. Этого не произошло в Linux или Windows.

У меня было собственное свойство, установленное в bootstrap.yml файл как это:

spring:
  profiles:
    active: native

Наконец, у меня на Mac все получилось: передать активный профиль в файл jar, вот так.

java -jar config-server.jar --spring.profiles.active=native

Я до сих пор не знаю, почему в Mac OS все по-другому.

Сервер конфигурации будет читать локальные файлы свойств, если application.properties Конфиг-сервер содержит:

spring.profiles.active=native
**spring.cloud.config.server.native.searchLocations=file:/source/tmp**

в /source/tmp каталог, вы храните локальный файл свойств для клиента, например:

http://localhost:8888/a-bootiful-client/default

ты получишь:

{"name":"a-bootiful-client","profiles":["default"],"label":null,"version":null,"state":null,"propertySources":[{"name":"file:/source/tmp/a-bootiful-client.properties","source":{"message":"Kim"}}]}

У меня была эта проблема на Mac, когда в пути к файлу есть пробел:

spring.cloud.config.server.native.search-locations=file:///Users/.../Development/Folder with a space /prj

Также обратите внимание, что перед пользователями стоит 3 слэша:

spring.cloud.config.server.native.search-locations=file:///Users/...

или я использую:

spring.cloud.config.server.native.search-locations=file://${user.home}/Desktop

Родное свойство:

spring.profiles.active=native

Я смог заставить его работать с локальным репо и конфигурацией начальной загрузки:

java -jar spring-cloud-config-server-1.0.0.M3-exec.jar --spring.config.name=bootstrap

Файл bootstrap.yml находится в папке./config/.

server:
  port: 8080
spring:
  config:
    name: cfg_server
  cloud:
    config:
      server:
       git:
        uri: /home/us/config_repo
        searchPaths: pmsvc,shpsvc

У меня была такая же проблема на моей локальной машине, но она прекрасно работает на моем удаленном сервере.

Ответ @ Оресте работает на меня. Итак, я проверил журнал ошибок еще раз, и я нашел

 2018-06-25 16:09:49.789  INFO 4397 --- [           main] t.p.a.s.api.user.UserServiceApplication  : The following profiles are active:  someProfileISetBefore

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

Надеюсь, вы не сделаете глупую ошибку, как я. Исправлено:

 unset spring_profiles_active 

Я добавил следующие два свойства, и они начали работать:

spring.cloud.config.server.git.default-label=main

spring.cloud.config.server.git.try-master-branch=true

Я использую весеннюю загрузку версии 2.6.0-SNAPSHOT

Если вы пытаетесь использовать локальное репо в файле .properties, включите их в свой файл application.properties на сервере.

      server.port=8888
spring.profiles.active=git
spring.cloud.config.server.git.uri=file:/link-to-local-git-repo

Вы можете получить ссылку на локальный репозиторий git, набрав pwd(ubuntu) на терминале, находясь в каталоге репозитория git.

Подчеркивание: убедитесь, что значение spring.profiles.active равно git not native

Затем введите

      http://localhost:8888/<name-of-file>/default

Во вкладке браузера

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