#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