Spring Boot Внешние свойства вне банки

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

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

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

измените этот @PropertySource ("classpath:" + SpringConfiguration.EXTERNALIZED_PROPERTIES) на @PropertySource ("file:" + {location}/propertiesfilename), это даст вам доступ к внешней стороне, также вы должны точно указать {location} через параметр JVM или spring параметр

Mithat Konuk 18.01.2019 13:10
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
1
5 518
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

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

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

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

 @Autowired  
 private Environment env;

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

ИЛИ

@Value("$myapplication.username")

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

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

cuteBrick 18.01.2019 12:50
stackoverflow.com/questions/41754459/… Это то, что вы ищете?
iamrajshah 18.01.2019 12:51

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

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

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

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

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

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

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

})

Предположим, что в папке "/дом/я/конфиги" у вас есть файл "приложение.свойства".

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

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'
Ответ принят как подходящий

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

Другие вопросы по теме