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
Во вкладке браузера