1. 程式人生 > >啟動多個Tomcat時修改埠,與修改埠後仍然以8080啟動

啟動多個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

) 才發現是我新解壓了一個 apache-tomcat-7.0.52 做修改樣板放在同級目錄下,所以按我以前配的環境變數
tomcat環境變變數配置
不管我執行哪個tomcat都只會執行做樣板的 apache-tomcat-7.0.52 原生程式

於是修改環境變數 :
配置多個CATALINA_HOME
同時修改 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