Включить свойство конфигурации в тесте без загрузки полного контекста приложения Spring Boot - PullRequest
0 голосов
/ 11 ноября 2018

Предположим, у нас есть приложение Spring Boot и мы хотим загрузить только определенный фрагмент контекста приложения.

В частности, загрузите конфигурацию файла YAML и сопоставьте spring.datasource с DataSourceProperties, отмеченным @ConfigurationProperties.

Наивное не рабочее объявление теста:

@RunWith(SpringRunner.class)
@ContextConfiguration(
    classes = {DataSourceAutoConfiguration.class, DataSourceProperties.class},
    loader = AnnotationConfigContextLoader.class,
    initializers = ConfigFileApplicationContextInitializer.class)
@TestPropertySource({"classpath:application.yaml", "classpath:application-dev.yaml"})
@EnableConfigurationProperties({DataSourceProperties.class})
@Slf4j
public class HibernateTest {
    @Autowired
    private DataSourceProperties dataSourceProperties;

    @Test
    public void dataSourceTest() throws SQLException {
        log.info("DS URL: {}", dataSourceProperties.getUrl());
    }
}

application-dev.yaml имеет:

spring.datasource:
  url: jdbc:oracle:thin:@localhost:1521/APP

Тестовые отпечатки:

DS URL: null

Я ищу способ сопоставить конфигурацию YAML с @ConfigurationProperties помеченным классом (DataSourceProperties) и использовать его @Configuration классом (DataSourceAutoConfiguration) без загрузки каких-либо других служб / компонентов / и т. Д. ...

1 Ответ

0 голосов
/ 12 ноября 2018

Эти ссылки отвечают на мои вопросы:

Короче говоря, разработчики Spring Framework не хотят поддерживать формат YAML для аннотации @TestPropertySource & @PropertySource, объясняющей, что поддержка YAML в Spring Boot сделана хитрым способом (хотя я потерял объяснения).

После переключения кода на использование .properties файлов мой тест работает нормально.

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