L'errore java.net.BindException di Tomcat: indirizzo già in uso in Java

1. Panoramica

In questo breve tutorial, esamineremo le cause del comune errore java.net.BindingException: indirizzo già in uso e come possiamo gestirlo.

2. Quando si verifica l'errore?

Come sappiamo, il server Apache Tomcat, per impostazione predefinita, utilizza la porta 8080.

I numeri di porta vanno da 0 a 65535, tuttavia, una porta può essere occupata solo da una singola applicazione in qualsiasi momento .

L'eccezione afferma che l'applicazione sta tentando di utilizzare una porta che è già stata utilizzata da un altro processo o che non abbiamo arrestato correttamente il server Tomcat.

3. Diagnosi

Per risolvere questo errore, possiamo terminare il servizio prendendo quella porta o cambiare il nostro server web in modo che funzioni su un'altra porta.

3.1. Alla scoperta del conflitto

In questo caso, dobbiamo scoprire quale applicazione sta utilizzando la porta.

Il comando netstat può essere utilizzato per scoprire le connessioni TCP / IP correnti.

Di seguito sono riportati i comandi che possono essere utilizzati per trovare e terminare il processo in diversi ambienti.

Su Windows, l'ultima colonna di output ci fornirà l'ID di processo del servizio attualmente in esecuzione su 8080:

netstat -ano | find "8080"

Produzione:

TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 21376 

Qui, 21376 è l'ID di processo del processo in ascolto sulla porta 8080.

In ambiente Unix / Linux :

netstat -pant | grep "8080"

Produzione:

TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 21376 

Uguale all'output di Windows. Qui, 21376 è l'ID di processo del processo in ascolto sulla porta 8080.

Su Mac OS X:

lsof -t -i :8080

Produzione:

21376

Visualizzerà solo il PID.

3.2. Server in esecuzione su un'altra porta

Se sappiamo quale processo è in esecuzione, perché è in esecuzione e che deve essere in esecuzione su quella porta, possiamo cambiare la porta su cui la nostra applicazione server sta tentando di funzionare.

Per cambiare la porta Tomcat, dobbiamo modificare il file server.xml . Per farlo:

  • Apri la cartella tomcat / conf
  • modifica server.xml
  • sostituire la porta del connettore con la nuova porta
  • riavviare il server tomcat

Il file server.xml ha questo aspetto:

Ora Tomcat verrà eseguito sulla porta personalizzata.

3.3. Uccidere il servizio in esecuzione

Per interrompere il processo in esecuzione, possiamo utilizzare il comando kill .

Utilizzando l'ID di processo che abbiamo trovato in 3.1., Avremo bisogno di comandi diversi a seconda del sistema operativo in esecuzione.

In ambiente Windows:

taskkill /F /PID 21376

In ambiente Unix / Linux:

kill - 21376

Ambiente Mac OS X:

kill -9 21376

4. Conclusione

Come accennato all'inizio dell'articolo, java.net.BindingException è un errore prevalente ma facilmente risolvibile.

La difficoltà principale è trovare il servizio in conflitto utilizzando la porta con l' applicazione terminale netstat , quindi decidere la linea di condotta appropriata.

Una volta scoperto, la soluzione è facile.