Не удалось запустить веб-сервер. Порт 8080 уже использовался. Микросервис Spring Boot

Я пытаюсь вызвать webAPI из проекта gradle.

Мой build.gradle выглядит следующим образом.

plugins {
    id 'org.springframework.boot' version '2.1.4.RELEASE'
    id 'java'
}

apply plugin: 'io.spring.dependency-management'

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter'
    runtimeOnly 'org.springframework.boot:spring-boot-devtools'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    compile 'org.springframework.boot:spring-boot-starter-webflux'
    compile 'org.projectreactor:reactor-spring:1.0.1.RELEASE'
}

Если я удалю следующую зависимость

compile 'org.springframework.boot:spring-boot-starter-webflux'

Это работает, но если я добавлю его обратно. выдает ошибку как

Web server failed to start. Port 8080 was already in use.

Итак, как мне это исправить, чтобы я мог использовать веб-клиент? Поскольку приложение не является веб-приложением, для запуска которого требуется порт. это своего рода микросервис.

Я просто хочу использовать WebClient Spring Boot. Как мне его использовать без преобразования моего приложения в веб-приложение.

Вы задаете тот же вопрос. Ваш порт 8080 уже привязан, вы не можете запустить загрузку Spring на том же порту. Перейдите в командную строку в Windows и введите команду netstat -a, вы узнаете, что работает на порту 8080.

Sambit 07.06.2019 21:03

извините, я очень новичок в весенней загрузке. Но зачем ему порт. Мне нужно, чтобы он работал как микросервис. если я не добавлю эту зависимость, она работает нормально.

Anonymous Creator 07.06.2019 21:05

Любой веб-сервер должен использовать любой порт для работы. Это фундаментальная концепция. Сначала попробуйте выполнить весеннюю загрузку с 1.5.0, возьмите пример из Интернета.

Sambit 07.06.2019 21:07

@AnonymousCreator, если бы не было порта, как бы вы получили доступ к своему серверу?

mavriksc 07.06.2019 21:10

я не могу просто использовать их метод веб-клиента? почему это веб-сервер. это просто консольное приложение. который я использую в качестве микросервиса. Spring Boot предназначен не только для веб-приложения, как я вижу в Интернете.

Anonymous Creator 07.06.2019 21:11

Несмотря на то, что этот вопрос касается использования веб-клиента без использования приложения в качестве веб-приложения, большинство из них было приведено сюда из-за Google. Для них вы пытаетесь запустить два приложения через один и тот же порт. Поэтому убейте уже работающее приложение или запустите новое приложение на другом порту. Более подробную информацию можно найти на странице springhow.com/….

Raja Anbazhagan 27.05.2021 17:15
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
26
6
175 695
21
Перейти к ответу Данный вопрос помечен как решенный

Ответы 21

Вы пытаетесь использовать уже используемый порт.

Порты используются на транспортном уровне — tcp, http — это прикладной уровень, который использует транспортный уровень для отправки и получения запросов.

Порт по умолчанию, предоставляемый приложением весенней загрузки, — 8080. В вашем случае у вас есть два решения:

  • изменить порт для вашего приложения
  • остановить службу, которая использует порт, который вы хотите использовать

Я не использую веб-приложение. Веб-приложению требуются порты.

Anonymous Creator 07.06.2019 22:12

хорошо, так что следующее должно помочь spring.main.web-application-type=none в вашем application.properties или то же самое для application.yml, но отформатировано.

Dominik 07.06.2019 22:17
Ответ принят как подходящий

Если вы не хотите, чтобы встроенный сервер запускался, просто установите в себе следующее свойство application.properties (или .yml):

spring.main.web-application-type=none

If your classpath contains the necessary bits to start a web server, Spring Boot will automatically start it. To disable this behaviour configure the WebApplicationType in your application.properties

Источник: https://docs.spring.io/spring-boot/docs/current/reference/html/howto-embedded-web-servers.html


Если ваше приложение действительно является является веб-приложением, вы можете легко изменить порт, используя свойство server.port (в файле .properties/.yaml вашего приложения, в качестве аргумента командной строки при запуске и т. д.).

вот что я хотел. так это запускается только тогда, когда есть webflux?

Anonymous Creator 07.06.2019 22:41

Не только webflux может запускать встроенный сервер автоматически, как упоминается в документе: Если ваш путь к классам содержит необходимые биты для запуска веб-сервера, Spring Boot автоматически запустит его.. Необходимые классы могут быть добавлены другими модулями Spring.

Gustavo Passini 10.06.2019 21:15

Ваше клиентское приложение также использует приложение Spring Boot, поэтому у вас есть два приложения Spring Boot, запущенные в порту 8080. Измените порт одного из них или создайте отдельное java-приложение с основным классом, поместите в него свой веб-клиент и запустите. В качестве http-клиента вы можете использовать Apache Http Client.

Вы можете изменить порт вашего приложения по умолчанию в application.properties, добавив следующую строку:

сервер.порт = 8090

Если в Windows и вы получаете это каждый раз, когда запускаете приложение, вам нужно продолжать делать:

> netstat -ano | findstr *<port used>*

  TCP    0.0.0.0:*<port used>*  0.0.0.0:0              LISTENING       *<pid>*
  TCP    [::]:*<port used>*     [::]:0                 LISTENING       *<pid>*

> taskkill /F /PID *<pid>*
SUCCESS: The process with PID *<pid>* has been terminated.

Если приведенный выше netstat включает что-то вроде этого;

TCP    [zzzz:e2ce:44xx:1:axx6:dxxf:xxx:xxxx]:540yy [zzzz:e2ce:44xx:1:axx6:dxxf:xxx:xxxx]:*<port used>* TIME_WAIT 0

Затем вы можете либо немного подождать, либо перенастроить на использование другого порта.

Я полагаю, мы могли бы написать некоторый код для случайной генерации и проверки, свободен ли порт при запуске приложения. Хотя это будет иметь убывающую отдачу по мере того, как они начинают израсходоваться. С другой стороны, можно добавить код очистки ресурсов, который делает то, что мы сделали выше, после остановки приложения.

Спасибо, что поделились решением. это действительно помогло мне

Assegd 06.04.2020 14:37
  1. создать папку /Ресурсы внутри источник/основной
  2. создать файл приложение.свойства внутри /Ресурсы
  3. напишите server.port=9090 // (используйте любой номер порта на ваш выбор)

Сегодня я работал в проекте Spring Boot и получил ту же ошибку в своем проекте. Итак, что я сделал, я щелкнул кнопка остановки рядом с запустить последнюю кнопку инструмента и снова запустил. Затем мой проект начал работать очень хорошо.

где эта кнопка запуска последнего инструмента весной?

Anu 20.12.2020 12:22

Лучший ответ на это — всегда использовать кнопку «Перезапустить приложение». Это остановит веб-сервер и перезапустит все приложение на том же порту, что и раньше.

Это кнопка с красным квадратом и зеленым значком воспроизведения.

https://i.stack.imgur.com/ICGtX.png

Вы также можете написать services.msc в строке поиска в Windows. Затем вы можете найти Apache Tomcat, а затем просто остановить этот апач. Я думаю, это сработает.Find Apache TomCat and Stop it

вы можете установить server.port= #some-available-port number в файле application.properties

или запустите командную строку в режиме администратора и запустите netstat -a -o -n. Найдите идентификатор процесса, который использует порт 8080.

Выполнить команду taskkill /F /PID #Processid

Это легко, у нас есть два метода решения. Первый — изменить номер порта в вашем приложение.свойства, т.е.

server.port=9999 //  something like this...

и во-вторых, сначала остановить доступный работающий сервер, а затем снова запустить ваш сервер.

Я уверен, что это работает :)

Некоторое время, если вы можете вручную kill the that port проблему можно решить.

Используя программное обеспечение CurrPorts, вы можете просмотреть, какие порты работают на вашем компьютере, и вы можете отключить этот порт, если хотите.

Вы можете скачать CurrPorts с сайта здесь. (ссылка для скачивания внизу страницы)

============== ИЛИ ===============

Без CurrPorts вы также можете сделать это, используя метод, описанный ниже.

  1. CMD как запустить от имени администратора
  2. Введите netstat -a -o -n и нажмите Enter. Теперь вы можете видеть, как показано ниже. Порт может видеть столбец Местный адрес после знака :.

  1. выберите идентификатор процесса (not port), на котором запущен ваш порт, введите команду taskkill /F /PID <process_id_here> и нажмите Enter.

Самый точный ответ, который я искал, спасибо, чувак! Этот ответ должен был быть на вершине!

Divya J 24.08.2021 15:28

Вы можете использовать npm, чтобы убить порт

**npx kill-port 8080**   //8080 for example

Требование: нпм

подробнее: https://www.npmjs.com/package/kill-порт

Установите менеджер пакетов NPM и попробуйте эту команду, она работает отлично. Но когда в код вносятся изменения, иногда сервер не обновляется автоматически, вам нужно убить процесс и перезапустить проект.

Suresh B B 22.01.2022 20:07

поймать java.net.BindException e с сообщением: Адрес уже используется и запустить на другом доступном порту и использовать веб-клиент с одним из 2-х портов.

try {
            SpringApplication.run(Application.class, args);
        } catch (org.springframework.boot.web.server.PortInUseException e) {
//Runtime.exec("pkil")..
//or
SpringApplication.run(Application.class, otherargs);
//SpringApplication.run(Application.class, new String[]{"--server.port=8444"});
//when invoked recursively it is a port rebalancer for port usage among port pool with server as from client for startup stage via application restarts within many busy ports which are used before or without querying.

}

Если вы ранее запускали приложение весенней загрузки и забыли остановиться, прежде чем снова нажать кнопку воспроизведения, перейдите в Windows диспетчер задач и найдите приложение Java (что-то вроде "Двоичный файл платформы OpenJDK" и нажмите «Завершить задачу». (Приложение Java не затмение). Затем попробуйте запустить снова. Это работал на меня.

если порт: 8080 уже используется, возникает ошибка:

  • перейти к командной строке .type команда> .netstat -ano .Enter-> это покажет все запущенные порты проверки порта 8080 .type команда> taskkill/F/PID 8080 .процесс завершится.

Другой способ сделать это — сначала проверить, какие процессы используют этот конкретный порт, а затем убить его, используя его идентификатор процесса:

  1. Беги lsof -i :8080 Это позволит определить, какой процесс прослушивает порт 8080.

  2. Обратите внимание на идентификатор процесса (PID), например. 63262

  3. Выполнить kill -9 <PID> например. kill -9 63262

Это простой ответ. Если вы получаете эту ошибку, перейдите в свой проект, а затем

src/main/resources и откройте файл application.properties и укажите там

server.port=8045 вы можете указать здесь свой номер вместо 8045

спасибо

Ошибка в основном означает, что ваш порт 8080 занят. Если вы получаете эту ошибку, перейдите в свой проект, откройте application.properties и добавьте строку ниже, и все должно работать нормально:

server.port = 8090

Если вы получаете эту ошибку снова и снова, убедитесь, что server.port=(ваш номер порта) является первой строкой в ​​файле application.properties.

это неверно, server.port может находиться где угодно в файле application.properties, и если порт уже используется чем-то другим, это никак не поможет.

PaulNUK 13.03.2022 18:58

Другие вопросы по теме