Я разрабатываю простой api с тремя конечными точками, используя vertx.
В этом api есть несколько предопределенных тестов, которые я не могу изменить и которые мне нужно пройти, в которых используются:
@Autowired
private GenericWebApplicationContext webApplicationContext;
private MockMvc mockMvc;
После завершения работы над api я обнаружил, что, поскольку я использую вертикальные статьи, мне не нужен встроенный tomcat, который обеспечивает зависимость от стартера загрузки Spring, поэтому я удалил его.
В чем моя проблема?
Я не могу исключить встроенный tomcat, потому что он нужен для весенней загрузки, иначе я получу следующую ошибку: 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).
Проблема здесь в том, что я могу изменить порт вертикали, например, на 8081, но тесты нужно будет выполнять на порту 8080. Как я могу это исправить, чтобы тесты прослушивали развернутую мной развертку (которая также создает http-сервер )?
В принципе, я хотел бы знать, возможно ли, что MockHttpServletResponse использует сервер vertx, который создается по вертикали вместо встроенного tomcat.




Проблема может быть в вашем pom.xml и в вашем классе @Configuration. Попробуйте добавить эту зависимость в свой pom.xml. Поэтому, когда вы развертываете свой военный файл на своем сервере, он будет запускать обычный 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, если хотите начать новый
В вашем файле application.properties поместите server.port = 8080 или 8082, вы можете увидеть, какой процесс использует порт, используя командную строку, используя netstat -a-o-n, и завершить его
Это не проблема, моя вершина vertx работает на 8081, а встроенный tomcat - на 8080. Проблема в том, что mockMvc выполняет запросы только на встроенном tomcat, а не на моей вершине, и я хотел бы использовать только http-сервер vertx, а не встроенный tomcat.
Я пробовал это, но при запуске
mvn clean spring-boot:runполучаю следующую ошибку:org.apache.catalina.LifecycleException: Failed to start component [Connector[HTTP/1.1-8080]]