<

I just announced the new Spring 5 modules in REST With Spring:

>> CHECK OUT THE COURSE

1. Overview

In this quick tutorial, we’ll look at what causes the common java.net.BindingException Error: Address already in Use error and how we can deal with it.

2. When Does the Error Occur?

As we know, the Apache Tomcat server, by default, uses the 8080 port.

Port numbers range from 0 to 65535, however, a port can only be occupied by a single application at any time.

The exception states that the application is trying to use a port that’s already taken by some other process, or we didn’t stop the Tomcat server properly.

3. Diagnosing

To solve this error, we can either kill the service taking that port or can change our web server to run on another port.

3.1. Discovering the Conflict

In this case, we need to find out which application is using the port.

The netstat command can be used for discovering current TCP/IP connections.

Below are the commands that can be used to find and kill the process in different environments.

On Windows, the last column of output will give us the process id of the service currently running on 8080:

netstat -ano | find "8080"

Output:

TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 21376

Here, 21376 is the process id of the process which is listening on port 8080.

On Unix/Linux Environment:

netstat -pant | grep "8080"

Output:

TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 21376

Same as Windows output. Here, 21376 is the process id of the process which is listening on port 8080.

On Mac OS X:

lsof -t -i :8080

Output:

21376

It will display the PID only.

3.2. Running Server on Another Port

If we know what process is running, why it’s running and that it needs to be running on that port, we can change the port that our server application is attempting to run on.

To change the Tomcat port, we need to edit the server.xml file. To do this:

  • Open tomcat/conf folder
  • edit server.xml
  • replace the connector port with the new port
  • restart tomcat server

The server.xml file looks like this:

<Connector port="8080" protocol="HTTP/1.1" 
  connectionTimeout="20000" redirectPort="8443" />

Now Tomcat will run on the customized port.

3.3. Killing the Running Service

To stop the running process, we can use the kill command. 

Using the process ID that we found in 3.1., we’ll require different commands depending on the Operating System we’re running.

On Windows environment:

taskkill /F /PID 21376

On Unix/Linux environment:

kill - 21376

Mac OS X environment:

kill -9 21376

4. Conclusion

As mentioned at the beginning of the article, java.net.BindingException is a prevalent but easily resolved error.

The main difficulty is in finding the conflicting service using the port with the netstat terminal application then deciding the appropriate course of action.

Once discovered, the fix is easy.

I just announced the new Spring 5 modules in REST With Spring:

>> CHECK OUT THE LESSONS