Я создаю приложение 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";
}
Но он по-прежнему читает свойства из папки ресурсов. Как я могу заставить его читать из-за пределов банки?




Если вам нужно добавить внешние свойства, вы можете указать это только в application.properties.
Например:
myapplication.username='john'
Из загрузочного кода Spring вы можете получить к нему доступ, например:
@Autowired
private Environment env;
//To access it
String username = env.getProperty("myapplication.username");
ИЛИ
@Value("$myapplication.username")
Я не думаю, что есть необходимость иметь внешний файл, если ваше требование соответствует тому, что вы упоминаете в вопросе.
Я хочу, чтобы внешний файл изменил некоторые свойства без создания нового файла jar.
Если вам нужны разные реквизиты для разработки и производства, используйте 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.
измените этот @PropertySource ("classpath:" + SpringConfiguration.EXTERNALIZED_PROPERTIES) на @PropertySource ("file:" + {location}/propertiesfilename), это даст вам доступ к внешней стороне, также вы должны точно указать {location} через параметр JVM или spring параметр