8080 port already taken issue when trying to redep

2020-02-07 15:43发布

问题:

I have strange thing when I try to modify Spring project inside my Spring Tool Suite. On the first load (deploy) everything is fine, application compiles and runs on localhost:8080

When I change something inside code and try to redeploy it (Run it again - Run As Spring Boot App) I get error message

*************************** APPLICATION FAILED TO START


Description:

The Tomcat connector configured to listen on port 8080 failed to start. The port may already be in use or the connector may be misconfigured.

Action:

Verify the connector's configuration, identify and stop any process that's listening on port 8080, or configure this application to listen on another port.

2016-10-19 00:01:22.615 INFO 10988 --- [ main] ationConfigEmbeddedWebApplicationContext : Closing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@3023df74: startup date [Wed Oct 19 00:01:19 CEST 2016]; root of context hierarchy 2016-10-19 00:01:22.616 INFO 10988 --- [ main] o.s.j.e.a.AnnotationMBeanExporter : Unregistering JMX-exposed beans on shutdown

If I shutdown process on that port manually everything works fine again, but this can't be right way of redeploying Spring app. Am I doing something wrong here?

I'm using :: Spring Boot :: (v1.4.1.RELEASE)

P.S. I'm aware that I can setup some kind of hot-swap mechanism to have automatic reload of page after I change code, but for now I would like to resolve this issue first.

Thanks for any kind of help or info.

回答1:

It sometimes happen even when we stop running processes in IDE with help of Red button , we continue to get same error.

It was resolved with following steps,

  1. Check what processes are running at available ports

    netstat -ao |find /i "listening"

    We get following

    TCP 0.0.0.0:7981 machinename:0 LISTENING 2428 TCP 0.0.0.0:7982 machinename:0 LISTENING 2428 TCP 0.0.0.0:8080 machinename:0 LISTENING 12704 TCP 0.0.0.0:8500 machinename:0 LISTENING 2428

    i.e. Port Numbers and what Process Id they are listening to

  2. Stop process running at your port number(In this case it is 8080 & Process Id is 12704)

    Taskkill /F /IM 12704 (Note: Mention correct Process Id)

For more information follow this link.

My Issue was resolved with this, Hope this helps !



回答2:

For Mac users(OS X El Capitan): You need to kill the port that localhost:8080 is running on. To do this, you need to do two commands in the terminal.

sudo lsof -i tcp:8080

kill -15 PID

NB! PID IS A NUMBER PROVIDED BY THE FIRST COMMAND.

The first command will give you the PID for the localhost:8080. Replace the PID in the second command with the PID that the first command gives you to kill the process running on localhost:8080.



回答3:

You have to stop the current process and run your new one. In Eclipse, you can press this button to ReLaunch your application:



回答4:

In my case, the error occurred as the application was unable to access the keystore for ssl.

Starting the application as root user fixed the issue.



回答5:

The reason is one servlet container is already running on port 8080 and you are trying to run another one on port 8080.

  1. Check what processes are running at available ports.

    • For windows : netstat -ao |find /i "listening" click here to view image OR netstat -ano | find "8080" (Note: 8080 is port fail to start) click here to view image
  2. Now try to reLaunch or stop your application.
    • To relaunch: you can press this button click here to view image
    • To stop in windows: Taskkill /F /IM 6592 (Note: Mention correct Process Id) click here to view image right click on the console and select terminate/disconnect all

Go to Task Manager and end Java(tm) platform se binary click here to view image https://www.google.com/search?q=what+is+java(tm)+platform+se+binary&oq=what+is+java(tm)+platform+se+binary&aqs=chrome..69i57.26349j1j7&sourceid=chrome&ie=UTF-8

  1. Go to application.properties file set server.port=0. This will cause Spring Boot to use a random free port every time it starts.


回答6:

If you got any error on your console by saying, “Embedded servlet container failed to start. Port 8080 was already in use.” Then go to application.properties file and add this property “server.port = 8090”.

Actually the default port for spring boot is 8080, if you have something else on that port, the above error will occur. So we are asking spring boot to run on other port by adding “server.port = 8090” in application.properties file.



回答7:

This is a typical startup failure due to the embedded servlet container’s port being in use.

Your embedded tomcat container failed to start because Port 8080 was already in use.

Just Identify and stop the process that's listening on port 8080 or configure (in you application.properties file )this application to listen on another port.



回答8:

There are two ways to resolve this issue.Try option 1 first, if it doesn't work try option 2, and your problem is solved.

1) On the top right corner of your console, there is a red button, to stop the spring boot application which is already running on this port just click on the red button to terminate.

2) If the red button is not activated you need to right click on the console and select terminate/disconnect all. Hope this helps.

Bonus tip:- If you want to run your server on a different port of your choice, create a file named application.properties in resource folder of your maven project and write server.port=3000 to run your application on port 3000



回答9:

Create application.properties file under src/main/resources folder and write content as

server.port=8084

Its runs fine. But every time before run need to stop application first by click on red button upper on the IDE

or try

RightClick on console>click terminate/Disconnect All



回答10:

Am I doing something wrong here?

Yes, you are. One servlet container is already running on port 8080 and you are trying to run another one on port 8080 again.

Either restart the server (If there is button for that in STS) or stop and start it



回答11:

Just click red button to stop all services on eclipse than re- run application as Spring Boot Application - This worked for me.



回答12:

Open "localhost:8080" on your browser and see what is running on this port. I did it and I just found Oracle 10g XE running on background, so I went to start->Services and stopped all oracle services. Then I redo mvnw spring-boot:run on IntelliJ and it runs like magic.



回答13:

On Linux Machine, save the bash script and execute it. If you want to free port 8080, Input 8080 when prompted

echo "Enter port number to be closed :: "
read port
sudo kill $(sudo lsof -t -i:$port)


回答14:

hi creating a simple line in application.properties as SERVER_PORT=8090 solved the issue.



回答15:

In Spring Boot Application (Using Spring Starter Project) We Have Update Port in Server.xml using Tomcat server and Add this port in application.property( insrc/main/resources) the code is server.port=8085

And update Maven Project then run application



回答16:

There are some processes left in the background on that port, several reasons can cause this problem, but you can solve easily if you end process which is related to 8080 or Spring.

If you are using Linux there is steps how to end process:

  1. Open terminal and type command "htop"
  2. press key F3(it will allow you to search)
  3. Type "8080" if there was no result on 8080 after that try "spring"
  4. Then Press F9(KILL) And press "9"(SIGKILL)

this will kill process which is left on 8080 port and let you run application.



回答17:

If you are using linux system, use the below command.

fuser -k some_port_number/tcp - that will kill that process.

Sample:-

fuser -k 8080/tcp



回答18:

No Need to manually start an application every time at time of development to implements changes use 'spring-boot-devtool' maven dependency.

Automatic Restart : To use the module you simply need to add it as a dependency in your Maven POM:

<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
    </dependency>

When you have the spring-boot-devtools module included, any classpath file changes will automatically trigger an application restart. We do some tricks to try and keep restarts fast, so for many microservice style applications this technique might be good enough.