我正在使用vertx
开发具有三个端点的简单api。
该api包含一些我无法修改且需要通过的预定义测试,这些测试使用:
@Autowired
private GenericWebApplicationContext webApplicationContext;
private MockMvc mockMvc;
完成api后,我发现在使用verticles时,我不需要提供Spring Boot Starter依赖项的嵌入式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.
,因为vertx verticle和tomcat侦听相同的端口(8080)。
这里的问题是,例如,我可以将verticle端口更改为8081,但是需要将测试执行到8080端口。如何解决此问题,以便测试监听我部署的verticle(这会创建一个http服务器也是)?
基本上,我想知道MockHttpServletResponse
是否使用由verticle创建的vertx服务器而不是嵌入式tomcat。
答案 0 :(得分:0)
问题可能出在pom.xml和@Configuration类中。尝试将此依赖项添加到pom.xml中。因此,当您将war文件部署到服务器时,它将运行普通的tomcat而不是嵌入
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
并在您的Application类中编写此代码
@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实例,必须将其关闭
答案 1 :(得分:0)
在您的application.properties文件中,将server.port = 8080或8082放入端口,您可以使用netstat -a-o-n命令提示符并终止端口,以查看哪个进程正在使用该端口