Считывание списка из .properties файла через @Value в Spring

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Если вам необходимо загрузить список из файла свойств в бин Spring'а, просто составьте список значений, отделив их друг от друга запятой. Затем используйте аннотацию @Value, вместе со SpEL, для загрузки списка:

properties
Скопировать код
# application.properties
listItems=Item1,Item2,Item3
Java
Скопировать код
// Бин Spring'a
@Component
public class Config {
    @Value("#{'${listItems}'.split(',')}")
    private List<String> values; // Вот и все! Из строки мы получили список 
}

Таким образом, аннотация @Value в сочетании с SpEL превращают строку с разделителями в практичный Java-список.

Кинга Идем в IT: пошаговый план для смены профессии

Основы загрузки списков

Представленный выше пример демонстрирует удобство работы с аннотацией @Value и SpEL. Метод .split(',') позволяет превращать строку в массив, который затем конвертируется в List<String>, под капотом у Spring.

Загрузка файла свойств это только начало работы. Файл обычно находится в каталоге src/main/resources проекта Maven или Gradle. Используя аннотацию @PropertySource, не забудьте указать путь и имя файла правильно.

Улучшение конфигурации с помощью ConversionService

ConversionService является мощным инструментом в Spring. После его регистрации в контексте Spring у вас будет полный контроль над процессом конвертации, включая обработку пробелов и кастомных разделителей.

Java
Скопировать код
@Bean
public ConversionService conversionService() {
  ConversionServiceFactoryBean bean = new ConversionServiceFactoryBean();
  bean.afterPropertiesSet(); // Готово к использованию!
  return bean.getObject();
}

Применение @ConfigurationProperties

Аннотация @ConfigurationProperties предлагает строгую типизацию для загрузки конфигурационных свойств прямо в объект, став просто незаменимым инструментом в Spring Boot.

Java
Скопировать код
@Component
@ConfigurationProperties(prefix = "email")
public class EmailProperties {
    private List<String> admins; // Готовы управлять списком email-администраторов!
    // геттеры и сеттеры
}

Визуализация

возьмем пример со списком свойств:

md
Скопировать код
Файл свойств: nuts=almond,pecan,walnut

Spring формирует список:
Java
Скопировать код
@Value("#{'${nuts}'.split(',')}")
private List<String> nutsList; // Время поиграть с орехами!

В результате получаем:

md
Скопировать код
Корзина орехов: [алмонд, пекан, грецкий орех] // Великолепно!

Вкратце, запятые в файле свойств разделяют элементы, @Value формирует nutsList, и вуаля, наш код готов к раздаче орешков!

Раскрываем возможности с помощью Autowiring

Использование @Autowired в связке с @Component и @ConfigurationProperties облегчает интеграцию свойств с бинами.

Автонастройка Spring Boot

Если вы используете Spring Boot, добавьте конфигурацию в файл META-INF/spring.factories и Spring Boot автоматически подтянет все компоненты, просто как по мановению волшебной палочки!

Когда свойства не доступны

Если свойства остаются неизвестными для приложения, убедитесь в следующем:

  • Проверьте аннотацию @PropertySource. Путь должен быть указан правильно.
  • application.properties или application.yml должны быть на своем месте.
  • Ключ, указанный в @Value, должен строго соответствовать ключу в файле свойств.

Полезные материалы

  1. Value (Spring Framework 6.1.3 API)
  2. Основные возможности
  3. Spring из Окопов: Внедрение Значений Свойств в Конфигурационные Бины – Петри Кайнулайнен
  4. Spring @PropertySource с использованием YAML – Stack Overflow
Свежие материалы