运行Spring Boot测试时访问配置类中的@LocalServerPort

Mat*_*s M 3 spring-boot spring-boot-test

我正在使用我的SpringBootTest. 我可以使用注释检索测试类中的随机端口@LocalServerPort

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@ContextConfiguration(classes = {MyTest.LocalConfig.class})
public class MyTest {

  @LocalServerPort
  private Integer port;
Run Code Online (Sandbox Code Playgroud)

不幸的是,我无法检索类中的随机端口Configuration,我想在类中使用随机端口创建测试 bean:

  @TestConfiguration
  public static class LocalConfig {

    @Bean
    public MyBean myBean(@Value("${local.server.port}") int port) {
Run Code Online (Sandbox Code Playgroud)

这里我得到这个错误:

Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 
'local.server.port' in value "${local.server.port}"
Run Code Online (Sandbox Code Playgroud)

Mat*_*s M 5

感谢knoobie我找到了这个解决方案:

@Lazy
@TestConfiguration
public static class LocalConfig {

  @Bean
  public MyBean myBean(@Value("${local.server.port}") int port) {
Run Code Online (Sandbox Code Playgroud)

如果使用,则可以访问类中的@Lazy值。local.server.portConfiguration

Lazy Configuration 类中的 Bean 最后将被实例化,因此端口在该阶段可用。

不幸的是,不可能将注释与覆盖 bean 结合使用,因为@Primary带注释的 bean 是在早期阶段实例化的。@Lazy@Primary