Spring boot @ConfigurationProperties не работает - PullRequest
0 голосов
/ 22 января 2019

Я использую @ConfigurationProperties для автоматической настройки свойств.Мой код работает в IDE.Но когда я запускаю флягу в командной строке, она не работает.

Класс конфигурации:

@Configuration
@ConfigurationProperties(prefix="location")
public class Location {

private String base;

public String getBase() {
    return base;
}

public void setBase(String base) {
    this.base = base;
}
}

Основной класс:

@SpringBootApplication
@EnableConfigurationProperties(Location.class)
@EnableAutoConfiguration
public class Application {

public static void main(String[] args) {

    SpringApplication.run(Application.class, args);
}
}

application.yml:

location:
 base: c:\test

Если I autowire Класс местоположения, я вижу созданный экземпляр.Но там не установлено свойство.Код не вводится методом setBase().

Приложение выводит это на консоль.

AutowiredAnnotationBeanPostProcessor : JSR-330 'javax.inject.Inject' 
annotation found and supported for autowiring

Ответы [ 2 ]

0 голосов
/ 23 января 2019

Поскольку с yaml ничего не работало, мне пришлось перейти на файл свойств и использовать

@ PropertySource ({ ": путь к классам application.properties"})

для пружины идентифицировать файл свойств

0 голосов
/ 22 января 2019

Убедитесь, что файл application.yml находится в корне вашего пути к классам, обычно он помещается в папку ресурсов.

Тот факт, что метод setBase () не вызывается, предполагает, что ваш файл application.ymlне найденSpring ищет в корне вашего classpath файл application.yml.

Комментарий М. Дейнма верен и говорит о том, что ваши дублированные аннотации приведут к появлению двух пружинных компонентов для класса Location.Однако, поскольку вы говорите, что вам удалось автоматически подключить bean-компонент без получения ошибки, это говорит о том, что ваш класс Location отсутствует в пакете, который обнаруживается весной при сканировании bean-компонентов.Если бы было 2 bean-компонента, вы бы получили ошибку при автоматическом подключении.По умолчанию Spring будет сканировать, используя пакет, в котором @SpringBootApplication является базой.Затем он будет искать этот пакет и все подпакеты.

Если структура вашего пакета такая ...

myapp.main
    Application.java
myapp.config
    Location.java

Затем вам нужно добавить scanBasePackages="myapp" к @SpringBootApplicationаннотация.

Также измените свой основной класс и удалите аннотации @Enable ..т.е.:

@SpringBootApplication(scanBasePackages="myapp")
public class Application {

    public static void main(String[] args) {

        SpringApplication.run(Application.class, args);
    }
}
...