Spring ContextConfiguration初始化程序在Spring Boot 2.1.0中运行太晚

时间:2018-12-05 21:32:12

标签: spring spring-boot spring-boot-test

我有一个SpringBootTest,它在@SpringBootTest上具有以下配置:

@ContextConfiguration(initializers = RandomPortPropertySourceContextInitializer.class)

RandomPortPropertySourceContextInitializer如下所示:

public class RandomPortPropertySourceContextInitializer implements
    ApplicationContextInitializer<ConfigurableApplicationContext> {

  @Override
  public void initialize(ConfigurableApplicationContext applicationContext) {
    RandomPortPropertySource randomPortPropertySource = new RandomPortPropertySource("randomPort");
    applicationContext.getEnvironment().getPropertySources().addAfter(
        StandardEnvironment.SYSTEM_ENVIRONMENT_PROPERTY_SOURCE_NAME, randomPortPropertySource);
  }
}

然后我可以在测试配置文件中使用从其分配的属性,例如:

oauth2.authorizationUri: http://localhost:${randomPort.wireMock}/mock/authorize

此约定取自与Spring相关的各种文章,用于在测试启动时为帮助程序分配随机可用的端口。所有这些在Spring Boot 1.5.x,2.0等中都可以正常工作,但是一旦升级到Spring Boot 2.1.0,该初始化程序似乎会在以后运行,现在我在启动时遇到错误,例如:

Caused by: java.lang.NumberFormatException: For input string: "${randomPort.app}"

初始化程序的运行顺序已发生某些变化,这导致此用例失败。如果删除配置文件用法以免启动失败,则初始化程序确实会运行,但那时为时已晚。

我尝试在发行说明中查找有关此更改的信息,但没有发现任何问题。有任何想法/建议吗?

0 个答案:

没有答案