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