gpt4 book ai didi

java - Spring Boot OpenFeign 随机端口测试

转载 作者:行者123 更新时间:2023-12-02 22:32:35 25 4
gpt4 key购买 nike

我有一个 OpenFeign 客户端,设置如下:

@FeignClient(name = "myService", qualifier = "myServiceClient", url = "${myservice.url}")
public interface MyServiceClient {
...
}

Spring Boot 测试设置如下:

@SpringBootTest(webEnvironment = RANDOM_PORT, classes = MyApplication.class)
@RunWith(SpringRunner.class)
@EnableFeignClients(clients = MyServiceClient .class)
public class ReservationSteps {
...
}

测试应该启动应用程序并使用 Feign 客户端向其发送请求。

问题在于 RANDOM_PORT 值。

如何在属性文件中声明“myservice.url”属性,以便它包含正确的端口?

我已经尝试过这个:

myservice.url=localhost:${local.server.port}

但结果是“localhost:0”。

我不想为端口使用常量值。

请帮忙。谢谢!

最佳答案

我知道这是一个老问题,但也许这个答案会对某人有所帮助

<小时/>

作为解决方法,我们可以做的是让主机解析为 Spring Ribbon。然后,您可以在测试开始之前动态配置主机。

首先,如果还没有 Maven 依赖项,请添加它

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
<scope>test</scope>
</dependency>

然后将测试配置为使用主机的“空”配置 URL 运行,即此处的 myservice.url 属性

@SpringBootTest(webEnvironment = RANDOM_PORT, classes = MyApplication.class)
@RunWith(SpringRunner.class)
@EnableFeignClients(clients = MyServiceClient.class)
@TestPropertySource(properties = "myservice.url=") // this makes sure we do the server lookup with ribbon
public class MyTest {
...
}

然后,在 @Before 方法中,我们需要做的就是向功能区提供服务 url,我们可以通过简单的 System.setProperty() 来做到这一点

public class MyTest {

@LocalServerPort
private int port;

@Before
public void setup() {
System.setProperty("MyServiceClient.ribbon.listOfServers", "http://localhost:" + port);
...
}

关于java - Spring Boot OpenFeign 随机端口测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58539366/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com