Spring Сервер облачной конфигурации, не работающий с локальным файлом свойств

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

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

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

Ответ 1

Весь мой код здесь 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"
                }
          }
     ]
}

Ответ 2

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

Пример application.yml приложения Spring config

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 apple-service:

spring:
  application:
    name: apple-service

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

Ответ 3

Использование 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 как источник ресурса.

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

Ответ 4

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

У меня было свойство native в файле bootstrap.yml:

spring:
  profiles:
    active: native

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

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

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

Ответ 5

Сервер конфигурации будет читать локальные файлы свойств, если 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"}}]}

Ответ 6

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

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

Ответ 7

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

Ответ @Oreste работает на меня. Поэтому я снова проверил журнал ошибок и обнаружил

 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 

Ответ 8

У меня была эта проблема на 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

Ответ 9

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

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

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

-Dspring.profiles.active=native

(в Netbeans: configserver-> project-> properties> Run-> параметры виртуальной машины

2) Либо в application.properties

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

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

или application.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://localhost:8998/app-admin/default/yml

дает app-admin.yml

http://localhost:8998/app-admin/develop/yml

дает app-admin -velop.yml