啟動多個Tomcat時修改埠,與修改埠後仍然以8080啟動
在Windows下啟動多個tomcat
之前已經配好了一個apache-tomcat-7.0.52,執行CAS(並改名為 apache-tomcat-CAS-9102 後簡稱為Tc)。後解壓了另一個tomcat(改名為 apache-tomcat-Solr-9101簡稱Ts)執行Solr時遇到的一些問題
為了方便修改,我保留了一個原版沒修改的資料夾 apache-tomcat-7.0.52(簡稱T7)
問題一:修改 tomcat 預設埠後 啟動仍然為8080
首先:按習慣先修改預設埠8080避免衝突,於是我在 Ts 的server.xml 中把 8080改為9101,Tc 的8080改為9102
將 cas.war 放到 Tc 的 webapps 資料夾下,啟動 Tc 。發現 啟動成功 能夠訪問tomcat頁面,但卻是 8080 埠, war 包 沒有被解壓,Tc 下的 logs 資料夾下也沒有任何日誌檔案。
也是我自己把自己坑進去了,開始一直以為是配置有問題後來執行原先的 Ts 也不行(改之前就叫 apache-tomcat-7.0.52
不管我執行哪個tomcat都只會執行做樣板的 apache-tomcat-7.0.52 原生程式
於是修改環境變數 :
同時修改 tomcat bin目錄下的 catalina.bat 、startup.bat、shutdown.bat 。Ts 下這三個檔案的 CATALINA_HOME 替換成 CATALINA_HOME1 ,相應的Tc 的替換成 CATALINA_HOME2 。
此時再分別啟動 Tc 或 Ts 成功,用相應 埠 訪問對應的頁面也沒問題了。
問題二:多個tomcat修改8080預設埠後仍然埠衝突
接上單個啟動沒問題後,我當然兩個一起開咯。然後問題又來了
嚴重: Failed to initialize connector [Connector[AJP/1.3-8009]]
org.apache.catalina.LifecycleException: Failed to initialize component [Connector[AJP/1.3-8009]]
at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:106)
at org.apache.catalina.core.StandardService .initInternal(StandardService.java:559)
at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
at org.apache.catalina.core.StandardServer.initInternal(StandardServer.java:813)
at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
at org.apache.catalina.startup.Catalina.load(Catalina.java:638)
at org.apache.catalina.startup.Catalina.load(Catalina.java:663)
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.load(Bootstrap.java:280)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:454)
Caused by: org.apache.catalina.LifecycleException: Protocol handler initialization failed
at org.apache.catalina.connector.Connector.initInternal(Connector.java:980)
at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
... 12 more
Caused by: java.net.BindException: Address already in use: JVM_Bind <null>:8009
at org.apache.tomcat.util.net.JIoEndpoint.bind(JIoEndpoint.java:410)
at org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:640)
at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:434)
at org.apache.catalina.connector.Connector.initInternal(Connector.java:978)
... 13 more
Caused by: java.net.BindException: Address already in use: JVM_Bind
at java.net.DualStackPlainSocketImpl.bind0(Native Method)
at java.net.DualStackPlainSocketImpl.socketBind(DualStackPlainSocketImpl.java:106)
at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:387)
at java.net.PlainSocketImpl.bind(PlainSocketImpl.java:190)
at java.net.ServerSocket.bind(ServerSocket.java:375)
at java.net.ServerSocket.<init>(ServerSocket.java:237)
at java.net.ServerSocket.<init>(ServerSocket.java:181)
at org.apache.tomcat.util.net.DefaultServerSocketFactory.createSocket(DefaultServerSocketFactory.java:49)
at org.apache.tomcat.util.net.JIoEndpoint.bind(JIoEndpoint.java:397)
... 16 more
不過這就很明顯啦,雖然列印的沒看清但是日誌檔案寫的很清除:8009埠被佔用,再看一下server.xml 檔案中埠相關配置有
<Server port="8005" shutdown="SHUTDOWN">
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
<Connector port="9102" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
所以啟動一個 tomcat 除了佔用 8080 埠外還會佔用 8005、8009、8443,選一個改成8006、8010、8444 再啟動。同時執行通過
暫時沒遇到別的問題,以後遇到再補充… …
我堅信每一分努力付出,必將換回一份收穫!
Arvin_Chen編輯整理,歡迎轉載,轉載請宣告文章來源。學習討論歡迎聯絡QQ:1036033343