1. Información general
En este tutorial rápido, veremos qué causa el error común de java.net.BindingException: Dirección ya en uso y cómo podemos solucionarlo.
2. ¿Cuándo ocurre el error?
Como sabemos, el servidor Apache Tomcat, por defecto, usa el puerto 8080.
Los números de puerto van de 0 a 65535, sin embargo, un puerto solo puede ser ocupado por una sola aplicación en cualquier momento .
La excepción indica que la aplicación está intentando usar un puerto que ya está ocupado por algún otro proceso, o que no detuvimos el servidor Tomcat correctamente.
3. Diagnóstico
Para resolver este error, podemos eliminar el servicio que toma ese puerto o cambiar nuestro servidor web para que se ejecute en otro puerto.
3.1. Descubriendo el conflicto
En este caso, necesitamos averiguar qué aplicación está utilizando el puerto.
El comando netstat se puede utilizar para descubrir conexiones TCP / IP actuales.
A continuación se muestran los comandos que se pueden usar para encontrar y matar el proceso en diferentes entornos.
En Windows, la última columna de salida nos dará la identificación del proceso del servicio que se ejecuta actualmente en 8080:
netstat -ano | find "8080"
Salida:
TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 21376
Aquí, 21376 es el ID de proceso del proceso que está escuchando en el puerto 8080.
En el entorno Unix / Linux :
netstat -pant | grep "8080"
Salida:
TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 21376
Igual que la salida de Windows. Aquí, 21376 es el ID de proceso del proceso que está escuchando en el puerto 8080.
En Mac OS X:
lsof -t -i :8080
Salida:
21376
Solo mostrará el PID.
3.2. Ejecutando servidor en otro puerto
Si sabemos qué proceso se está ejecutando, por qué se está ejecutando y que debe ejecutarse en ese puerto, podemos cambiar el puerto en el que nuestra aplicación de servidor está intentando ejecutarse.
Para cambiar el puerto de Tomcat, necesitamos editar el archivo server.xml . Para hacer esto:
- Abra la carpeta tomcat / conf
- editar server.xml
- reemplace el puerto del conector con el nuevo puerto
- reiniciar el servidor tomcat
El archivo server.xml se ve así:
Ahora Tomcat se ejecutará en el puerto personalizado.
3.3. Matar al servicio en ejecución
Para detener el proceso en ejecución, podemos usar el comando kill .
Usando el ID de proceso que encontramos en 3.1., Necesitaremos diferentes comandos dependiendo del sistema operativo que estamos ejecutando.
En el entorno de Windows:
taskkill /F /PID 21376
En el entorno Unix / Linux:
kill - 21376
Entorno Mac OS X:
kill -9 21376
4. Conclusión
Como se mencionó al principio del artículo, java.net.BindingException es un error frecuente pero que se resuelve fácilmente.
La principal dificultad es encontrar el servicio conflictivo usando el puerto con la aplicación de terminal netstat y luego decidir el curso de acción apropiado.
Una vez descubierto, la solución es fácil.