Spring Boot Внешние свойства вне банки - PullRequest
0 голосов
/ 18 января 2019

Я создаю приложение Spring Boot и столкнулся с этой проблемой.
У меня есть application.properties в папке recource, но мне также нужен файл external.properties вне jar для настройки таких свойств, как:
имя,
пароль
и т.д.
Я хочу иметь файл external.properties вне jar и внутри папки resources для тестирования во время разработки.
Я попытался создать файл конфигурации следующим образом:

@Configuration
 @PropertySource("classpath:" + SpringConfiguration.EXTERNALIZED_PROPERTIES)
 @PropertySource(value = "file:./" + 
 SpringConfiguration.EXTERNALIZED_PROPERTIES, ignoreResourceNotFound = true)
 public class SpringConfiguration {
       static final String EXTERNALIZED_PROPERTIES = "external.properties";
 }

Но он все еще читает свойства из папки ресурсов. Как я могу заставить его читать снаружи банку?

Ответы [ 5 ]

0 голосов
/ 24 января 2019

Решением было удаление external.properties и файла конфигурации. И вместо того, чтобы использовать его, поместите все свойства в application.properties. И поместите application.properties в папку с jar. Spring автоматически устанавливает приоритет этого файла свойств над файлом свойств внутри jar.

0 голосов
/ 18 января 2019

Аналогичный ответ Мачей Ковальски.

@PropertySources({
@PropertySource(value = {"classpath:application.properties"}, ignoreResourceNotFound = true),
@PropertySource(value = {"file:${external.config.location}/application.properties"}, ignoreResourceNotFound = true)

})

Предположим, в папке " / home / me / configs " у вас есть файл " application.properties ".

Запустить приложение с пользовательской папкой:

java -jar app.jar --external.config.location="/home/me/configs"

или

java -jar app.jar --external.config.location="C:\\users\\your_user\\configs"

Дополнительно вы можете экспортировать его как переменную среды (unix)

export JAVA_OPTS='-Dexternal_config_location=/home/me/configs'
0 голосов
/ 18 января 2019

Если вы хотите использовать разные реквизиты для разработки и производства, используйте application-dev.properties и application-prod.properties и установите правильный профиль пружины при запуске. Если вам нужно переопределить любое свойство из фляги, просто добавьте -Dmyproperty=myvalue в команду запуска

0 голосов
/ 18 января 2019

Попробуйте указать абсолютный системный путь в качестве значения атрибута file:.

При желании я бы посоветовал установить этот абсолютный путь сначала как переменную ENV, а затем использовать эту переменную в file::

@PropertySource("file:${EXTERNAL_RESOURCE_DIR}/application.properties") 

Так что, когда этот каталог изменится, вам не нужно будет изменять ваш код.

0 голосов
/ 18 января 2019

Если вам нужно добавить внешние свойства, вы можете указать это только в application.properties.

Например: myapplication.username='john'

Из кода загрузки Spring вы можете получить к нему доступ:

 @Autowired  
 private Environment env;

//To access it
 String username = env.getProperty("myapplication.username");  

OR

@Value("$myapplication.username")

Я не думаю, что есть необходимость во внешнем файле, если ваше требование, как вы упомянули в вопросе.

...