Tomcat java.net.BindException: Adresse, der allerede er i brug Fejl i Java

1. Oversigt

I denne hurtige vejledning ser vi på, hvad der forårsager det fælles java.net.BindingException Fejl: Adresse, der allerede er i brug fejl, og hvordan vi kan håndtere det.

2. Hvornår opstår fejlen?

Som vi ved bruger Apache Tomcat-serveren som standard 8080-porten.

Portnumre varierer fra 0 til 65535, dog en port kan kun besættes af en enkelt applikation til enhver tid.

Undtagelsen siger, at applikationen forsøger at bruge en port, der allerede er taget af en anden proces, eller vi stoppede ikke Tomcat-serveren korrekt.

3. Diagnosticering

For at løse denne fejl kan vi enten dræbe den tjeneste, der tager den port, eller kan ændre vores webserver til at køre på en anden port.

3.1. Opdage konflikten

I dette tilfælde skal vi finde ud af, hvilken applikation der bruger porten.

Det netstat kommando kan bruges til at finde aktuelle TCP / IP-forbindelser.

Nedenfor er de kommandoer, der kan bruges til at finde og dræbe processen i forskellige miljøer.

På Windows, den sidste kolonne med output vil give os proces-id for den tjeneste, der i øjeblikket kører på 8080:

netstat -ano | find "8080"

Produktion:

TCP 0.0.0.0:8080 0.0.0.0:0 LYTTER 21376 

Her er 21376 proces-id for den proces, der lytter på port 8080.

På Unix / Linux-miljø:

netstat -pant | grep "8080"

Produktion:

TCP 0.0.0.0:8080 0.0.0.0:0 LYTTER 21376 

Samme som Windows-output. Her er 21376 proces-id for den proces, der lytter på port 8080.

På Mac OS X:

lsof -t -i: 8080

Produktion:

21376

Det viser kun PID.

3.2. Kører server på en anden port

Hvis vi ved, hvilken proces der kører, hvorfor den kører, og at den skal køre på den port, kan vi ændre den port, som vores serverapplikation forsøger at køre på.

For at ændre Tomcat-porten skal vi redigere server.xml fil. At gøre dette:

  • Åben tomcat / conf folder
  • redigere server.xml
  • udskift stikport med ny port
  • genstart tomcat-serveren

Det server.xml filen ser sådan ud:

Nu kører Tomcat på den tilpassede port.

3.3. Dræber den løbende tjeneste

For at stoppe køreprocessen kan vi bruge dræbe kommando.

Brug af proces-id'et, som vi fandt i 3.1., Og vi kræver forskellige kommandoer afhængigt af det operativsystem, vi kører.

I Windows-miljø:

taskkill / F / PID 21376

På Unix / Linux-miljø:

dræbe - 21376

Mac OS X-miljø:

dræb -9 21376

4. Konklusion

Som nævnt i begyndelsen af ​​artiklen, java.net.BindingException er en udbredt, men let løst fejl.

Det største problem er at finde den modstridende tjeneste ved hjælp af porten med netstat terminalansøgning og derefter beslutte det passende handlingsforløb.

Når opdaget, er løsningen let.