application.properties не читается с @EnableAutoConfiguration и пользовательским стартером весенней загрузки - PullRequest
0 голосов
/ 30 октября 2019

Я пытаюсь создать простой пользовательский пружинный загрузчик, который читает свойство в application.properties:

@EnableConfigurationProperties({ CustomStarterProperties.class })
@Configuration
public class CustomStarterAutoConfiguration {

    @Autowired
    private CustomStarterProperties properties;

    @Bean
    public String customStarterMessage() {
        return properties.getMessage();
    }
}

с его ConfigurationProperties:

@ConfigurationProperties(prefix = "custom.starter")
public class CustomStarterProperties {

    private String message;

  /* getter and setter */
           ...
}

Тамтакже соответствующие application.properties и META-INF/spring.factories для включения autoconfiguration.

У меня есть другой проект, который объявляет этот стартер как зависимость и в котором я пишу тест, чтобы увидеть, создан ли Bean customStarterMessage:

@RunWith(SpringRunner.class)
@EnableAutoConfiguration
public class TotoTest {

    @Autowired
    String customStarterMessage;

    @Test
    public void loadContext() {
        assertThat(customStarterMessage).isNotNull();
    }
}

Этот тест не пройден (даже при наличии соответствующего файла application.properties в проекте), поскольку application.properties, похоже, не читается.

Он хорошо работает с аннотацией @SpringBootTest вместо @EnableAutoConfiguration, но я хотел бы понять, почему EnableAutoConfiguration не использует мой файл application.properties, тогда как из моего понимания вся AutoConfiguration Spring основана на свойствах.

Спасибо

1 Ответ

0 голосов
/ 30 октября 2019

@EnableAutoConfiguration в тестовых классах не подготавливает для вас необходимый тестовый контекст.

Принимая во внимание, что @SpringBootTest выполняет настройку тестового контекста по умолчанию для вас на основе спецификации по умолчанию, такой как сканирование из корневого пакета, загрузка из ресурсов по умолчанию,Для загрузки из пользовательских пакетов, которые не являются частью иерархии корневых пакетов, при загрузке из пользовательских каталогов ресурсов вы определяете это даже в конфигурации тестового контекста. Все ваши конфигурации будут автоматически выполнены в вашем текущем стартовом проекте на основе @EnableAutoConfiguration, который вы определили.

...