Tomcat java.net.BindException: Adresse som allerede er i bruk Feil i Java

1. Oversikt

I denne raske opplæringen vil vi se på hva som forårsaker det vanlige java.net.BindingException Error: Adresse som allerede er i bruk feil og hvordan vi kan håndtere det.

2. Når oppstår feilen?

Apache Tomcat-serveren bruker som kjent 8080-porten som standard.

Portnumre varierer fra 0 til 65535, men en port kan bare okkuperes av en enkelt applikasjon når som helst.

Unntaket sier at applikasjonen prøver å bruke en port som allerede er tatt av en annen prosess, eller at vi ikke stoppet Tomcat-serveren ordentlig.

3. Diagnostisering

For å løse denne feilen kan vi enten drepe tjenesten som tar den porten, eller endre webserveren vår til å kjøre på en annen port.

3.1. Oppdage konflikten

I dette tilfellet må vi finne ut hvilket program som bruker porten.

De netstat kommandoen kan brukes til å oppdage nåværende TCP / IP-tilkoblinger.

Nedenfor er kommandoene som kan brukes til å finne og drepe prosessen i forskjellige miljøer.

På Windows, den siste kolonnen med utdata vil gi oss prosess-ID for tjenesten som for tiden kjører på 8080:

netstat -ano | finn "8080"

Produksjon:

TCP 0.0.0.0:8080 0.0.0.0:0 LYTTER 21376 

Her er 21376 prosess-ID for prosessen som lytter på port 8080.

På Unix / Linux-miljø:

netstat -bukse | grep "8080"

Produksjon:

TCP 0.0.0.0:8080 0.0.0.0:0 LYTTER 21376 

Samme som Windows-utdata. Her er 21376 prosess-ID for prosessen som lytter på port 8080.

På Mac OS X:

lsof -t -i: 8080

Produksjon:

21376

Den viser bare PID.

3.2. Kjører server på en annen port

Hvis vi vet hvilken prosess som kjører, hvorfor den kjører og at den må kjøre på den porten, kan vi endre porten som serverprogrammet vårt prøver å kjøre på.

For å endre Tomcat-porten, må vi redigere server.xml fil. Å gjøre dette:

  • Åpen tomcat / conf mappe
  • redigere server.xml
  • bytt ut kontaktport med ny port
  • start tomcat-serveren på nytt

De server.xml filen ser slik ut:

Nå vil Tomcat kjøre på den tilpassede porten.

3.3. Dreper Running Service

For å stoppe prosessen, kan vi bruke drepe kommando.

Ved å bruke prosess-IDen som vi fant i 3.1., Krever vi forskjellige kommandoer avhengig av operativsystemet vi kjører.

I Windows-miljø:

taskkill / F / PID 21376

På Unix / Linux-miljø:

drepe - 21376

Mac OS X-miljø:

drepe -9 21376

4. Konklusjon

Som nevnt i begynnelsen av artikkelen, java.net.BindingException er en utbredt, men lett løst feil.

Hovedproblemet er å finne den motstridende tjenesten ved hjelp av porten med netstat terminalapplikasjon og deretter bestemme riktig handlingsmåte.

Når oppdaget, er løsningen enkel.


$config[zx-auto] not found$config[zx-overlay] not found