我们的服务器已经有两个正在运行的应用程序,它们在使用 tomcat7
的 centOS
服务器中正常运行。
我使用新应用程序上传了一个新的 war 文件,然后:
sh ./shutdown.sh
sh ./startup.sh
当我尝试使用新应用程序的端点从 postman
运行 API 时,我会在服务器的日志文件中得到:
07-Feb-2020 16:57:22.925 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in [15,277] milliseconds
07-Feb-2020 16:57:22.927 SEVERE [main] org.apache.catalina.core.StandardServer.await Failed to create server shutdown socket on address [localhost] and port [8005] (base port [8005] and offset [0])
java.net.BindException: Address already in use (Bind failed)
at java.net.PlainSocketImpl.socketBind(Native Method)
at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:387)
at java.net.ServerSocket.bind(ServerSocket.java:390)
at java.net.ServerSocket.<init>(ServerSocket.java:252)
at org.apache.catalina.core.StandardServer.await(StandardServer.java:584)
at org.apache.catalina.startup.Catalina.await(Catalina.java:721)
at org.apache.catalina.startup.Catalina.start(Catalina.java:667)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:343)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:474)
07-Feb-2020 16:57:22.927 INFO [main] org.apache.coyote.AbstractProtocol.pause Pausing ProtocolHandler ["http-nio-8080"]
07-Feb-2020 16:57:22.927 INFO [main] org.apache.coyote.AbstractProtocol.pause Pausing ProtocolHandler ["ajp-nio-8009"]
07-Feb-2020 16:57:22.927 INFO [main] org.apache.catalina.core.StandardService.stopInternal Stopping service [Catalina]
07-Feb-2020 16:57:23.050 WARNING [1] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads The web application [cef-authentication] appears to have started a thread named [mysql-cj-abandoned-connection-cleanup] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread:
07-Feb-2020 16:57:23.054 INFO [1] org.apache.coyote.AbstractProtocol.stop Stopping ProtocolHandler ["http-nio-8080"]
07-Feb-2020 16:57:23.054 INFO [1] org.apache.coyote.AbstractProtocol.destroy Destroying ProtocolHandler ["http-nio-8080"]
07-Feb-2020 16:57:23.054 INFO [1] org.apache.coyote.AbstractProtocol.stop Stopping ProtocolHandler ["ajp-nio-8009"]
07-Feb-2020 16:57:23.054 INFO [1] org.apache.coyote.AbstractProtocol.destroy Destroying ProtocolHandler ["ajp-nio-8009"]
07-Feb-2020 16:57:23.059 INFO [17] org.apache.catalina.loader.WebappClassLoaderBase.checkStateForResourceLoading Illegal access: this web application instance has been stopped already. Could not load [java.lang.ClassLoader]. The following stack trace is thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access.
java.lang.IllegalStateException: Illegal access: this web application instance has been stopped already. Could not load [java.lang.ClassLoader]. The following stack trace is thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access.
at org.apache.catalina.loader.WebappClassLoaderBase.checkStateForResourceLoading(WebappClassLoaderBase.java:1385)
at org.apache.catalina.loader.WebappClassLoaderBase.checkStateForClassLoading(WebappClassLoaderBase.java:1373)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1226)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1188)
at com.mysql.cj.jdbc.AbandonedConnectionCleanupThread.checkThreadContextClassLoader(AbandonedConnectionCleanupThread.java:117)
at com.mysql.cj.jdbc.AbandonedConnectionCleanupThread.run(AbandonedConnectionCleanupThread.java:84)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
您知道如何在不中断其他应用程序的情况下解决此问题吗?
最佳答案
此警告意味着您的应用程序正在尝试监听已被另一个进程使用的端口(在您的情况下为 localhost:8005)。
- 如果该端口被另一个应用程序故意使用,那么您 对此无能为力(您不能在 相同的端口)。所以你应该改变这个应用程序的端口(例如 第8006章
- 如果该端口不应被使用,例如由于某个原因而被使用
未正确结束的应用程序已离开正在运行的进程使用
netstat
找到该进程并杀死它。然后开始你的 再次申请。
关于java - 尝试从 war 文件启动新应用程序时出现 java.net.BindException : Address already in use,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60116044/