Как экстернализировать приложение.yml при загрузке spring

#spring-boot

#весенняя загрузка

Вопрос:

Привет, в настоящее время мой проект использует application.yml из src /main /resources по умолчанию. Я хочу использовать приложение.файл yml в другом месте, чтобы я мог редактировать свойства, когда захочу. Пожалуйста, предложите любую идею

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

1. вы ищете централизованный сервер управления конфигурацией, что-то вроде spring-cloud? spring.io/projects/spring-cloud

2. Это приложение шлюза микросервиса. Он использует spring cloud. Но я просто хочу, чтобы к этому файлу applicatin.yml был доступен извне.

Ответ №1:

Spring Boot позволяет экстернализировать вашу конфигурацию, чтобы вы могли работать с одним и тем же кодом приложения в разных средах. Для экстернализации конфигурации можно использовать файлы свойств, YAML-файлы, переменные среды и аргументы командной строки. Значения свойств могут быть введены непосредственно в ваши компоненты с помощью @Value аннотации, доступны через Environment абстракцию Spring или привязаны к структурированным объектам через @ConfigurationProperties .

Подробная информация: https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html#boot-features-external-config-yaml

https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html

Пример установки JAVA_OPTS переменной среды

 -Dspring.profiles.active=dev -Dspring.config.location=file:C:/application-external.yml
  

Это позволит вам предоставить несколько профилей внутри файла YML и позволит spring выполнить тяжелую работу по оценке правильных свойств:

 spring:
  profiles: dev
someproperty: devproperty
---
spring:
  profiles: test
someproperty: testproperty
  

Чтобы использовать внешние файлы конфигурации в вашей сборке Maven: настройте плагин maven surefire следующим образом в вашем pom.xml :

 <plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <configuration>
     <argLine>-Dspring.config.location=file:${home}/conf/application-external.yml
   </configuration>
</plugin>
  

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

1. Я использую микросервисный шлюз jhipster. Я использую mvnw для запуска приложения. я предпочитаю указывать местоположение в коде. Я попытался передать в качестве аргумента, это не работает.

2. @Nila Попробуйте использовать свойство среды spring.config.location. Представьте, что у вас есть внешний конфигурационный файл: application-external.yml в каталоге conf / dir в вашем домашнем каталоге, просто добавьте его следующим образом: -Dspring.config.location=file:${home}/conf/application-external.yml в качестве параметра запуска вашей виртуальной машины. Если у вас несколько файлов, просто разделите их запятой. Обратите внимание, что вы можете легко использовать внешние свойства, подобные этому, для перезаписи свойств, а не просто добавлять их.

3. @Nila Обновил ответ, указав внешние файлы конфигурации с указанием местоположения в вашем Maven pom.xml

4. Я перепробовал все, но он по-прежнему извлекается из файла war (целевой папки). 🙁

5. @Nila попробуйте использовать относительный путь, например spring.config.location=file:///application-external.yml