Java spring引导测试-如何在spring引导之前启动嵌入式服务器?

Java spring引导测试-如何在spring引导之前启动嵌入式服务器?,java,spring,spring-boot,integration-testing,Java,Spring,Spring Boot,Integration Testing,编写集成测试时,经常需要在临时端口上启动一些服务器(例如redis、zookeeper),然后将端口作为属性传递给Spring。问题在于,在服务器启动之前,实际使用的端口未知,因此无法通过注释传递: @IntegrationTest(["redis.port=???"]) class RedisTest { @Before before(){ int port = startRedis( } } 实现这一目标的惯用方法是什么?理想情况下,我想把它放在jun

编写集成测试时,经常需要在临时端口上启动一些服务器(例如redis、zookeeper),然后将端口作为属性传递给Spring。问题在于,在服务器启动之前,实际使用的端口未知,因此无法通过注释传递:

@IntegrationTest(["redis.port=???"])
class RedisTest {
    @Before
    before(){
       int port = startRedis(
    }
}
实现这一目标的惯用方法是什么?理想情况下,我想把它放在junit规则中

下面是一些对我有用但看起来不太好的方法(通过静态变量传递端口):

@IntegrationTest(initializers=Initializer.class)
公共类测试{
公共静态int端口;
公共静态类初始值设定项实现ApplicationContextInitializer{
公共无效初始化(ConfigurableApplicationContext ctx){
port=startRedis()
EnvironmentTestUtils.addEnvironment(ctx,“redisPort=”+端口)
}
}
}


这与问题无关。。。我的问题与环境中的其他服务器有关,而不是嵌入在Spring Boot中的http。这与问题无关。。。我的问题与环境中的其他服务器有关,而不是Spring Boot中嵌入的http。
@IntegrationTest(initializers=Initializer.class)
public class RedisTest {
    public static int port;

    public static class Initializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {
        public void initialize(ConfigurableApplicationContext ctx){
            port = startRedis()
            EnvironmentTestUtils.addEnvironment(ctx, "redisPort=" + port)
        }
    }
}
//set server.port=0 and then inject the actual (‘local’) port as a @Value

@WebIntegrationTest("server.port:0")    
public class RedisTest{

    @Autowired
    EmbeddedWebApplicationContext server;

    @Value("${local.server.port}")
    int port;    

}