Springboot - @ConfigurationProperties не заполняет поля класса

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

Я хочу загрузить конфигурацию из внешнего файла yaml admin-config.yml, а не стандартного application.yml в моем случае.

Это то, что я сделал до сих пор.

  1. Аннотировал файл приложения с помощью @EnableConfigurationProperties
@SpringBootApplication
@EnableConfigurationProperties
public class MyServer {

    public static void main(String[] args) {
        SpringApplication.run(MyServer.class, args);
    }
}
  1. Класс компонента AdminConfig:
@Component
@PropertySource("classpath:admin-config.yml")
@ConfigurationProperties(prefix = "admin-config")
public class AdminConfig {

    private List<PrimeModerator> primeModerators;

    @PostConstruct
    public void init() {
        System.out.println(primeModerators);    // this is null
    }

    public void setPrimeModerators(List<PrimeModerator> primeModerators) {
        this.primeModerators = primeModerators;
    }

    public List<PrimeModerator> getPrimeModerators() {
        return primeModerators;
    }
}

  1. PrimeModerator класс
@Data
public class PrimeModerator implements Serializable {
    private long id;
    private String name;
    private List<String> roles;
    private String details;
    private Date created;
}
  1. admin-config.yml.
admin-config:
  primeModerators:
    - !!com.mydomain.model.PrimeModerator
      id: 1
      name: Pawan
      roles: [super-admin]

    - !!com.mydomain.model.PrimeModerator
      id: 2
      name: Prashant
      roles: [admin, moderator]

Я создал модульный тестовый пример, который всегда терпит неудачу (чего не должно быть).

@SpringBootTest
@RunWith(SpringRunner.class)
public class AdminConfigTest {

    @Autowired
    private AdminConfig adminConfig;

    @Test
    public void testAdminConfig() {
        assertNotNull(adminConfig.getPrimeModerators());    // this fails
    }
}

Я не уверен, что мне здесь не хватает. Использование версии Springboot 2.2.1.RELEASE с jdk8.

Спасибо за ваши ответы заранее!


person Pawan    schedule 15.09.2020    source источник


Ответы (1)


из этой документации: Баелдунг – Весна

В нем говорится: Инфраструктура Hibernate Validation использует стандартные геттеры и сеттеры Java-бинов, поэтому важно, чтобы мы объявляли геттеры и сеттеры для каждого из свойств.

Не могли бы вы проверить, добавив геттеры/сеттесты в PrimeModerator? Вы пытались использовать одно простое строковое значение перед вложенным массивом? Удачи...

Пример github для Baeldung внизу страницы

person Issam El Hachimi    schedule 15.09.2020
comment
Аннотация @Data Lombok автоматически генерирует геттеры и сеттеры. - person jAC; 15.09.2020
comment
Да. Я добавил аннотацию @Data от Lombok, которая должна работать. - person Pawan; 15.09.2020
comment
Извините, без пакета забыл, что это аннотация с Ломбока. У вас есть файл YML в src/test/resources? - person Issam El Hachimi; 15.09.2020
comment
Да @IssamElHachimi - person Pawan; 15.09.2020
comment
Что произойдет, если вы удалите !! строка внутри вашего YML? Я думаю, вы могли бы начать с рабочего образца и далее усложнить структуру данных...:/ - person Issam El Hachimi; 15.09.2020