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

#spring #spring-cloud #configserver

#spring #spring-cloud #configserver

Вопрос:

У меня запущен и запущен сервер конфигурации с соответствующим приложением.настройка yml

 spring:
  application:
    name: config
    ...
      searchPaths:
        - '{application}'
        - '{application}/{profile}'
  

Я хотел бы получить доступ к файлу , которого нет application.properties , что — то вроде myfile.txt . Если у меня есть макет git

 /myapp/nested/folder/myfile.txt
  

Я хочу иметь доступ к этому файлу. Согласно документам Spring Config Server, я должен иметь возможность сделать это с помощью /{name}/{profile}/{label}/{path} , но я не могу заставить какие-либо пути работать.

TL; DR: Как мне получить вложенные файлы конфигурации из репозитория git через Config Server?

Комментарии:

1. Попробуйте использовать косые черты, а не (_) ?

2. В документах специально вызывается использование (_) вместо / , чтобы можно было анализировать разграничения между {label} и {application} и т. Д. Я все равно добавлю эти попытки, чтобы показать, что они не работают.

3. Они предназначены только для заполнителей в конфигурации, а не для пути к файловому api.

Ответ №1:

TL; DR: Документация неверна. Конечная /{name}/{profile}/{label}/{path} точка должна быть записана как /{application}/{profile}/{label}/{path} . Вам просто нужно убедиться, что один из ваших searchPaths/{path} файлов может разрешить ваш файл.


Во-первых, {label} это, как всегда, имя ветки git (вероятно, «master»).

Во-вторых, {path} can может быть абсолютным путем к файлу. Он использует / , myapp/nested/folder/myfile.txt т.Е. , Не (_) так, как требуется в {application} или {label} .

В-третьих, пути поиска в вопросе заданы на '{application}' и '{application}/{profile}' , наряду с путем поиска по умолчанию / , корневой каталог репозитория git. Они определяют места, в которых сервер конфигурации будет искать обычный текстовый файл, как:

 /{expanded application}/{path}
/{expanded application}/{profile}/{path}
/{path}
  

Обратите внимание, что {application} он может быть расширен только на несколько папок с (_) помощью и {path} может включать только несколько папок с / помощью . Например, для этих searchPaths файлов и файла, расположенного по адресу /myapp/nested/folder/myfile.txt , допустимы следующие запросы:

 /asdf/asdf/master/myapp/nested/folder/myfile.txt
/myapp/asdf/master/nested/folder/myfile.txt
/myapp/nested/master/folder/myfile.txt
/myapp(_)nested(_)folder/asdf/master/myfile.txt
/myapp(_)nested/folder/master/myfile.txt
  

где asdf может быть любая произвольная строка.

Комментарии:

1. Я, конечно, могу создать сервер конфигурации и указать такой путь http://localhost:8888/foo/default/master/nested/hello.txt , который правильно получает файлы в каталоге.

2. Похоже, вы правы. Возможно указать полный путь с помощью / . Я бы хотел, чтобы это было задокументировано где-нибудь на странице «обслуживание текстовых файлов», а не только файлов верхнего уровня.

3. Отредактировал мой ответ, спасибо за помощь. Я бы хотел это сделать! надеюсь, я доберусь до этого где-нибудь на этой неделе.

4. Я думаю {name} , что поле неверно, поскольку оно отображается {application} в searchPaths наборе I и вызывается {application} везде в документации. Другие части были просто неясны, поскольку не было примера с вложенным путем к файлу.