Spring Boot загрузка списка из файла конфигурации возвращает пустой список - PullRequest
0 голосов
/ 04 февраля 2019

Я только что создал очень простое приложение для весенней загрузки с использованием весеннего инициализатора и пробую все.Я хочу загрузить список из файла конфигурации yaml, но он всегда возвращает пустой.

У меня есть пользовательский класс конфигурации

@ConfigurationProperties("example-unit")
@EnableConfigurationProperties
public class ConfigurationUnit {

    public List<String> confiList = new ArrayList<>();

    public List<String> getConfiList() {
        return this.confiList;
    }

}

И мой основной класс выглядит следующим образом

@SpringBootApplication
public class DemoApplication {

    static ConfigurationUnit configurationUnit = new ConfigurationUnit();


    public static void main(String[] args) {

        SpringApplication.run(DemoApplication.class, args);

        List<String> hello = configurationUnit.getConfiList();

        System.out.print("");
    }

}

Я поместил файл application.yaml в папку ресурсов.

example-unit:
  - string1
  - string2
  - hello22

Я искал здесь и в Интернете, но не могу понять, в чем проблема, и ничего, что я изменил, не помогло.Я знаю, что, должно быть, я делаю что-то не так.

Ответы [ 4 ]

0 голосов
/ 04 февраля 2019

Вот справка о том, как Spring Bboot Configurtion Binding работает.

Специально для вашего вопроса, это пример приложения, которое достигает вашей цели:

  • application.yml
example-unit:
  confiList:
    - string1
    - string2
    - hello22
  • источники
@SpringBootApplication
@EnableConfigurationProperties(ConfigurationUnit.class)
public class DemoApplication {

    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(DemoApplication.class, args);
        ConfigurationUnit configurationUnit = context.getBean(ConfigurationUnit.class);
        System.out.println(configurationUnit.getConfiList());
    }

}

@ConfigurationProperties("example-unit")
public class ConfigurationUnit {

    public List<String> confiList = new ArrayList<>();

    public List<String> getConfiList() {
        return this.confiList;
    }

}
0 голосов
/ 04 февраля 2019

Вот пример:

Application.yml:

example-unit: string1,string2,hello22

ConfigurationUnit.class:

@Component
@PropertySource(value="classpath:application.yml")
public class ConfigurationUnit {

    @Value("#{'${example-unit}'.split(',')}")
    private List<String> confiList;

    public List<String> getConfiList() {
        return confiList;
    }
}

DemoFileLoadApplication.class:

@SpringBootApplication
public class DemoFileLoadApplication {

    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(DemoFileLoadApplication.class, args);
        ConfigurationUnit configurationUnit = context.getBean(ConfigurationUnit.class);
        System.out.println(configurationUnit.getConfiList());
    }
}

Вывод:

[string1, string2, hello22]

0 голосов
/ 04 февраля 2019

Это неверное утверждение static ConfigurationUnit configurationUnit = new ConfigurationUnit(); не следует создавать объект

Spring только внедряет свойства в bean-объекты, которые обрабатываются контекстом приложения, а spring создает bean-компоненты классов, аннотированные @ Configuration

ConfigurationUnit

@Configuration
@ConfigurationProperties("example-unit")
public class ConfigurationUnit {

public List<String> confiList;

public List<String> getConfiList() {
    return this.confiList;
    }

 }

DemoApplication В основной загрузочной пружине получить bean-компонент из applicationcontext и получить из него объект списка

@SpringBootApplication
public class DemoApplication {

public static void main(String[] args) {

    ApplicationContext context = SpringApplication.run(DemoApplication.class, args);
     ConfigurationUnit unit = context.getBean("configurationUnit"):

    System.out.print(unit. getConfiList());
   }

}
0 голосов
/ 04 февраля 2019

Поместите ваш список под prefix.property .В вашем случае example-unit.confi-list:.Обычно предоставляют сеттер для вашей собственности: setConfiList(List<String> strings).Но так как вы уже инициализировали его как пустой список Array, этот установщик устарел и говорит this .Также рекомендуется добавить аннотацию Enable в класс приложения:

Класс приложения должен иметь аннотацию @EnableConfigurationProperties

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...