Я пытаюсь вызвать 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. Как мне его использовать без преобразования моего приложения в веб-приложение.
извините, я очень новичок в весенней загрузке. Но зачем ему порт. Мне нужно, чтобы он работал как микросервис. если я не добавлю эту зависимость, она работает нормально.
Любой веб-сервер должен использовать любой порт для работы. Это фундаментальная концепция. Сначала попробуйте выполнить весеннюю загрузку с 1.5.0, возьмите пример из Интернета.
@AnonymousCreator, если бы не было порта, как бы вы получили доступ к своему серверу?
я не могу просто использовать их метод веб-клиента? почему это веб-сервер. это просто консольное приложение. который я использую в качестве микросервиса. Spring Boot предназначен не только для веб-приложения, как я вижу в Интернете.
Несмотря на то, что этот вопрос касается использования веб-клиента без использования приложения в качестве веб-приложения, большинство из них было приведено сюда из-за Google. Для них вы пытаетесь запустить два приложения через один и тот же порт. Поэтому убейте уже работающее приложение или запустите новое приложение на другом порту. Более подробную информацию можно найти на странице springhow.com/….




Вы пытаетесь использовать уже используемый порт.
Порты используются на транспортном уровне — tcp, http — это прикладной уровень, который использует транспортный уровень для отправки и получения запросов.
Порт по умолчанию, предоставляемый приложением весенней загрузки, — 8080. В вашем случае у вас есть два решения:
Я не использую веб-приложение. Веб-приложению требуются порты.
хорошо, так что следующее должно помочь spring.main.web-application-type=none в вашем application.properties или то же самое для application.yml, но отформатировано.
Если вы не хотите, чтобы встроенный сервер запускался, просто установите в себе следующее свойство 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?
Не только webflux может запускать встроенный сервер автоматически, как упоминается в документе: Если ваш путь к классам содержит необходимые биты для запуска веб-сервера, Spring Boot автоматически запустит его.. Необходимые классы могут быть добавлены другими модулями Spring.
Ваше клиентское приложение также использует приложение 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
Затем вы можете либо немного подождать, либо перенастроить на использование другого порта.
Я полагаю, мы могли бы написать некоторый код для случайной генерации и проверки, свободен ли порт при запуске приложения. Хотя это будет иметь убывающую отдачу по мере того, как они начинают израсходоваться. С другой стороны, можно добавить код очистки ресурсов, который делает то, что мы сделали выше, после остановки приложения.
Спасибо, что поделились решением. это действительно помогло мне
server.port=9090 // (используйте любой номер порта на ваш выбор)Сегодня я работал в проекте Spring Boot и получил ту же ошибку в своем проекте. Итак, что я сделал, я щелкнул кнопка остановки рядом с запустить последнюю кнопку инструмента и снова запустил. Затем мой проект начал работать очень хорошо.
где эта кнопка запуска последнего инструмента весной?
Лучший ответ на это — всегда использовать кнопку «Перезапустить приложение». Это остановит веб-сервер и перезапустит все приложение на том же порту, что и раньше.
Это кнопка с красным квадратом и зеленым значком воспроизведения.
вы можете установить 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 вы также можете сделать это, используя метод, описанный ниже.
netstat -a -o -n и нажмите Enter. Теперь вы можете видеть, как показано ниже. Порт может видеть столбец Местный адрес после знака :.(not port), на котором запущен ваш порт, введите команду taskkill /F /PID <process_id_here> и нажмите Enter.Самый точный ответ, который я искал, спасибо, чувак! Этот ответ должен был быть на вершине!
Вы можете использовать npm, чтобы убить порт
**npx kill-port 8080** //8080 for example
Требование: нпм
подробнее: https://www.npmjs.com/package/kill-порт
Установите менеджер пакетов NPM и попробуйте эту команду, она работает отлично. Но когда в код вносятся изменения, иногда сервер не обновляется автоматически, вам нужно убить процесс и перезапустить проект.
поймать 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 уже используется, возникает ошибка:
Другой способ сделать это — сначала проверить, какие процессы используют этот конкретный порт, а затем убить его, используя его идентификатор процесса:
Беги lsof -i :8080
Это позволит определить, какой процесс прослушивает порт 8080.
Обратите внимание на идентификатор процесса (PID), например. 63262
Выполнить kill -9 <PID> например. kill -9 63262
Сбросить порт 8080.
Ошибка в основном означает, что ваш порт 8080 занят. Если вы получаете эту ошибку, перейдите в свой проект, откройте application.properties и добавьте строку ниже, и все должно работать нормально:
server.port = 8090
Если вы получаете эту ошибку снова и снова, убедитесь, что server.port=(ваш номер порта) является первой строкой в файле application.properties.
это неверно, server.port может находиться где угодно в файле application.properties, и если порт уже используется чем-то другим, это никак не поможет.
Вы задаете тот же вопрос. Ваш порт 8080 уже привязан, вы не можете запустить загрузку Spring на том же порту. Перейдите в командную строку в Windows и введите команду netstat -a, вы узнаете, что работает на порту 8080.