Считывание списка из .properties файла через @Value в Spring
Быстрый ответ
Если вам необходимо загрузить список из файла свойств в бин Spring'а, просто составьте список значений, отделив их друг от друга запятой. Затем используйте аннотацию @Value
, вместе со SpEL, для загрузки списка:
# application.properties
listItems=Item1,Item2,Item3
// Бин Spring'a
@Component
public class Config {
@Value("#{'${listItems}'.split(',')}")
private List<String> values; // Вот и все! Из строки мы получили список
}
Таким образом, аннотация @Value
в сочетании с SpEL превращают строку с разделителями в практичный Java-список.
Основы загрузки списков
Представленный выше пример демонстрирует удобство работы с аннотацией @Value
и SpEL. Метод .split(',')
позволяет превращать строку в массив, который затем конвертируется в List<String>
, под капотом у Spring.
Загрузка файла свойств это только начало работы. Файл обычно находится в каталоге src/main/resources
проекта Maven или Gradle. Используя аннотацию @PropertySource
, не забудьте указать путь и имя файла правильно.
Улучшение конфигурации с помощью ConversionService
ConversionService является мощным инструментом в Spring. После его регистрации в контексте Spring у вас будет полный контроль над процессом конвертации, включая обработку пробелов и кастомных разделителей.
@Bean
public ConversionService conversionService() {
ConversionServiceFactoryBean bean = new ConversionServiceFactoryBean();
bean.afterPropertiesSet(); // Готово к использованию!
return bean.getObject();
}
Применение @ConfigurationProperties
Аннотация @ConfigurationProperties
предлагает строгую типизацию для загрузки конфигурационных свойств прямо в объект, став просто незаменимым инструментом в Spring Boot.
@Component
@ConfigurationProperties(prefix = "email")
public class EmailProperties {
private List<String> admins; // Готовы управлять списком email-администраторов!
// геттеры и сеттеры
}
Визуализация
возьмем пример со списком свойств:
Файл свойств: nuts=almond,pecan,walnut
Spring формирует список:
@Value("#{'${nuts}'.split(',')}")
private List<String> nutsList; // Время поиграть с орехами!
В результате получаем:
Корзина орехов: [алмонд, пекан, грецкий орех] // Великолепно!
Вкратце, запятые в файле свойств разделяют элементы, @Value
формирует nutsList
, и вуаля, наш код готов к раздаче орешков!
Раскрываем возможности с помощью Autowiring
Использование @Autowired
в связке с @Component
и @ConfigurationProperties
облегчает интеграцию свойств с бинами.
Автонастройка Spring Boot
Если вы используете Spring Boot, добавьте конфигурацию в файл META-INF/spring.factories
и Spring Boot автоматически подтянет все компоненты, просто как по мановению волшебной палочки!
Когда свойства не доступны
Если свойства остаются неизвестными для приложения, убедитесь в следующем:
- Проверьте аннотацию
@PropertySource
. Путь должен быть указан правильно. application.properties
илиapplication.yml
должны быть на своем месте.- Ключ, указанный в
@Value
, должен строго соответствовать ключу в файле свойств.