1. Обзор
В этом кратком руководстве мы рассмотрим причину распространенной ошибки __java.net.BindingException: адрес уже используется __error и способы его устранения.
2. Когда возникает ошибка?
Как известно, сервер Apache Tomcat по умолчанию использует порт 8080.
Номера портов варьируются от 0 до 65535, однако порт может быть занят только одним приложением в любое время .
Исключение гласит, что приложение пытается использовать порт, который уже занят каким-либо другим процессом, или мы неправильно остановили сервер Tomcat.
3. Диагностика
Чтобы устранить эту ошибку, мы можем либо убить службу, использующую этот порт, либо изменить наш веб-сервер для работы на другом порту.
3.1. Обнаружение конфликта
В этом случае нам необходимо выяснить, какое приложение использует порт.
Команда netstat может использоваться для обнаружения текущих соединений TCP/IP.
Ниже приведены команды, которые можно использовать для поиска и уничтожения процесса в разных средах.
-
В Windows ** последний столбец вывода даст нам идентификатор процесса службы, в настоящее время работающей на 8080:
netstat -ano | find "8080"
Выход:
TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 21376
Здесь 21376 - это идентификатор процесса, который прослушивает порт 8080.
-
В среде Unix/Linux ** :
netstat -pant | grep "8080"
Выход:
TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 21376
То же, что и выход Windows. Здесь 21376 - это идентификатор процесса, который прослушивает порт 8080.
-
В Mac OS X: **
lsof -t -i :8080
Выход:
21376
Он будет отображать только PID.
3.2. Запуск сервера на другом порту
Если мы знаем, какой процесс запущен, почему он работает и что он должен работать на этом порту, мы можем изменить порт, на котором пытается запустить приложение нашего сервера.
Чтобы изменить порт Tomcat, нам нужно отредактировать файл server.xml . Сделать это:
-
Откройте папку _tomcat/conf _
-
редактировать server.xml
-
замените _connector порт with new port_
-
перезапустите сервер Tomcat
Файл server.xml выглядит следующим образом:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000" redirectPort="8443"/>
Теперь Tomcat будет работать на настроенном порту.
3.3. Убить работающую службу
-
Чтобы остановить запущенный процесс, мы можем использовать команду kill . **
Используя идентификатор процесса, который мы нашли в 3.1., Нам потребуются разные команды в зависимости от операционной системы, которую мы используем.
-
В среде Windows: **
taskkill/F/PID 21376
-
В среде Unix/Linux: **
kill - 21376
-
Среда Mac OS X: **
kill -9 21376
4. Заключение
Как упоминалось в начале статьи, java.net.BindingException является распространенной, но легко решаемой ошибкой.
Основная трудность заключается в том, чтобы найти конфликтующий сервис, используя порт с терминальным приложением netstat , а затем принять решение о соответствующем курсе действий.
После обнаружения исправить это легко.