首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring Boot OpenFeign随机端口测试

Spring Boot OpenFeign随机端口测试
EN

Stack Overflow用户
提问于 2019-10-24 18:29:05
回答 1查看 617关注 0票数 3

我有一个OpenFeign客户端,如下所示:

代码语言:javascript
复制
@FeignClient(name = "myService", qualifier = "myServiceClient", url = "${myservice.url}")
public interface MyServiceClient {
...
}

一个Spring Boot测试设置如下:

代码语言:javascript
复制
@SpringBootTest(webEnvironment = RANDOM_PORT, classes = MyApplication.class)
@RunWith(SpringRunner.class)
@EnableFeignClients(clients = MyServiceClient .class)
public class ReservationSteps {
...
}

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

问题出在RANDOM_PORT的值上。

如何在属性文件中声明"myservice.url“属性,使其包含正确的端口?

我已经尝试过了:

代码语言:javascript
复制
myservice.url=localhost:${local.server.port}

但它会导致"localhost:0“。

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

请帮帮忙。谢谢!

EN

回答 1

Stack Overflow用户

发布于 2020-03-22 17:00:06

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

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

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

代码语言:javascript
复制
<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
   <scope>test</scope>
</dependency>

然后配置您的测试,使其使用主机的“空”配置url运行,这里是myservice.url属性

代码语言:javascript
复制
@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方法中,我们所需要做的就是提供指向ribbon的服务url,我们可以通过一个简单的System.setProperty()来实现这一点

代码语言:javascript
复制
public class MyTest {

    @LocalServerPort
    private int port;

    @Before
    public void setup() {
        System.setProperty("MyServiceClient.ribbon.listOfServers", "http://localhost:" + port);
        ...
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58539366

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档