5

我正在开发一个具有三个端点的简单 api,使用vertx.

该 api 有一些我无法修改并且需要通过的预定义测试,这些测试使用:

@Autowired
private GenericWebApplicationContext webApplicationContext;
private MockMvc mockMvc;

完成 api 后,我发现当我使用 verticles 时,我不需要提供 spring boot 启动器依赖的嵌入式 tomcat,所以我删除了它。

哪个是我的问题?

我不能排除嵌入式tomcat,因为spring boot需要它,否则我会得到以下错误:The Tomcat connector configured to listen on port 8080 failed to start. The port may already be in use or the connector may be misconfigured.as vertx verticle and tomcat listen to the same port (8080).

这里的问题是,例如,我可以将 Verticle 端口更改为 8081,但测试需要在端口 8080 上执行。我该如何解决这个问题,以便测试监听我部署的 Verticle(这也创建了一个 http 服务器)?

基本上我想知道是否有可能MockHttpServletResponse使用由verticle而不是嵌入式tomcat创建的vertx服务器。

4

2 回答 2

0

问题可能出在您的 pom.xml 和您的 @Configuration 类中。尝试将此依赖项添加到您的 pom.xml 中。所以当你将你的war文件部署到你的服务器时,它将运行普通的tomcat而不是嵌入的

<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <scope>provided</scope>
    </dependency>

在你的应用程序类中写下这个

@SpringBootApplication
public class Application extends SpringBootServletInitializer {

public static void main(String[] args) {

    SpringApplication.run(Application.class, args);
}

@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
    return application.sources(Application.class);
}

}

. 然后你面临的问题是,tomcat 已经启动,所以它在端口 8080 上侦听,你尝试运行另一个 tomcat 来侦听相同的问题。

如果你想开始新的,你必须关闭旧的 tomcat 实例

于 2018-09-15T13:06:45.227 回答
0

在您的 application.properties 文件中放置 server.port=8080 或 8082 您可以使用 netstat -aon 命令提示符查看哪个进程正在使用该端口并终止它

于 2018-09-15T14:18:08.627 回答