1. 程式人生 > >一個tomcat下部署多個專案或一個伺服器部署多個tomcat

一個tomcat下部署多個專案或一個伺服器部署多個tomcat

最近需要把兩個專案同時部署到伺服器上,於是研究了一下,頁借鑑了很多別人的方法,把過程記錄下來,以儆效尤。

目錄:

1,一個tomcat下同時部署兩個專案(多個專案可以參考)

1.1專案都放在webapps內(共用一個埠)

1)把兩個專案都放在webapps下。

2)處理重複jar包。

3)tomcat埠預設為8080.如果想修改可以去conf下的server.xml中進行修改

4)啟動tomcat

  1.2建立多個類似於webapps的資料夾,通過conf下的server.xml進行配置(每個專案使用不同埠)

1)在tomcat的webapps同一層目錄下新建webapps1資料夾,webapps放入第一個專案,webapps2放入第二個專案。
2)同1.1第二步:處理重複jar包。
3)修改server.xml檔案,設定埠等資訊。

4)啟動tomcat.

2,一臺伺服器上同時執行2個tomcat.(多個應該類似)

2.1.使用壓縮版的tomcat不能使用安裝版的。  
2.2.第一個tomcat的配置不變。  
2.3.增加環境變數CATALINA_HOME2,值為新的tomcat的地址;增加環境變數CATALINA_BASE2,值為新的tomcat的地址。  
2.4.修改新的tomcat中的startup.bat、shutdown.bat,把其中的CATALINA_HOME改為CATALINA_HOME2。  
2.5.修改新的tomcat中的catalina.bat,把其中的CATALINA_HOME改為CATALINA_HOME2,CATALINA_BASE改為CATALINA_BASE2。  
2.6.修改conf/server.xml檔案: 

2.7成功! 

1,一個tomcat下同時部署兩個專案(多個專案可以參考)
1.1專案都放在webapps內(共用一個埠)
1)把兩個專案都放在webapps下。
2)處理重複jar包。
兩個專案如果有重複的jar包,一定要進行處理,否則會導致伺服器記憶體耗盡,報類似於http-bio-8080"-exec-1等異常。
解決方案:建立共享包路徑。
參考文章:https://my.oschina.net/angerbaby/blog/271438
我採用第一種:
修改catalina.properties中的common.loader屬性。在common.loader屬性原值基礎上追加

“${catalina.home}/lib/shared/*.jar”,然後啟動tomcat。很顯然,

需要將共享的jar包放到一個

shared目錄裡,然後將shared目錄放到tomcat下lib目錄裡。
建立好共享資料夾之後,把相同的包都放在共享資料夾,每個專案WEB-INF下的lib放各自獨有的。

3)tomcat埠預設為8080.如果想修改可以去conf下的server.xml中進行修改

<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
4)啟動tomcat  

1.2建立多個類似於webapps的資料夾,通過conf下的server.xml進行配置(每個專案使用不同埠)
1)在tomcat的webapps同一層目錄下新建webapps1資料夾,webapps放入第一個專案,webapps2放入第二個專案。
2)同1.1第二步:處理重複jar包。
3)修改server.xml檔案,設定埠等資訊。
a,首先了解下tomcat的幾個主要埠:

<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="60000"

redirectPort="8443" disableUploadTimeout="false"

executor="tomcatThreadPool" URIEncoding="UTF-8"/>

其中8080為HTTP埠,8443為HTTPS埠

<Server port="8005" shutdown="SHUTDOWN">   

8005為遠端停服務埠

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> 

8009為AJP埠,APACHE能過AJP協議訪問TOMCAT的8009埠。

b,修改server.xml.
主要操作為在server下在增加一個service,這個檔案中修改的地方主要是Connector裡的埠,也就是咱們方法的http埠,

註釋掉8009AJP埠,修改host下的

appBase為對應的webapps,過程如下。

<?xml version='1.0' encoding='utf-8'?>
 
<Server port="8005" shutdown="SHUTDOWN">
  <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
 
  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
  <!-- Prevent memory leaks due to use of particular java/javax APIs-->
  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
  
  <GlobalNamingResources>
   
    <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml" />
  </GlobalNamingResources>
	<!-- the first service-->
    <Service name="Catalina">

   
    <Connector port="80" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
<!-- 註釋的地方-->
 <!--    
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

 -->
  
    <Engine name="Catalina" defaultHost="localhost">

    
      <Realm className="org.apache.catalina.realm.LockOutRealm">
       
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
      </Realm>

      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">

        
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t "%r" %s %b" />

      </Host>
    </Engine>
	
  </Service>
  
  <!-- the second service-->
    
    <Service name="Catalina">
	<!-- 修改的地方-->
    <Connector port="8081" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
			    -->
					<!-- 註釋的地方-->
  <!--   
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

 -->



    <Engine name="Catalina" defaultHost="localhost">

     
      <Realm className="org.apache.catalina.realm.LockOutRealm">
       
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
      </Realm>
		<!-- 修改的地方 appBase:第二個專案放置的位置-->
      <Host name="localhost"  appBase="webapps1"
            unpackWARs="true" autoDeploy="true">

       
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t "%r" %s %b" />

      </Host>
    </Engine>
  </Service>
 
</Server>

可以看到,第一個service中只需要註釋掉8009那部分。如果不註釋會發生埠被佔用的情況,其他不用改變,

第二個service為第一個service的副本,

在其中修改80埠為8081.host的appBase修改為自己對應的位置。

如果想部署多個專案,再次增加service節點即可。
4),啟動tomcat

2,一臺伺服器上同時執行2個tomcat.(多個應該類似)
如果現在一臺機器上已經部署了一個tomcat服務,無論這個tomcat是否已經註冊為服務了,或者沒有註冊windows服務,

或者註冊了,都沒關係。都可以採用下面的方法實現。
如果該tomcat已經註冊為windows服務了,從window的環境變數中找不到 
CATALINA_HOME和CATALINA_BASE,也可以採用下面的方式實現。 

當第一個tomcat啟動後,後面tomcat的server.xml中的埠不管怎麼改,仍然會報埠衝突。

後來在dos下執行才發現所有的tomcat都會去找

CATALINA_HOME和CATALINA_BASE這兩個環境變數,因此步驟如下:  
2.1.使用壓縮版的tomcat不能使用安裝版的。  
2.2.第一個tomcat的配置不變。  
2.3.增加環境變數CATALINA_HOME2,值為新的tomcat的地址;增加環境變數CATALINA_BASE2,值為新的tomcat的地址。  
2.4.修改新的tomcat中的startup.bat、shutdown.bat,把其中的CATALINA_HOME改為CATALINA_HOME2。  
2.5.修改新的tomcat中的catalina.bat,把其中的CATALINA_HOME改為CATALINA_HOME2,CATALINA_BASE改為CATALINA_BASE2。  
2.6.修改conf/server.xml檔案:  

<Server port="8005" shutdown="SHUTDOWN">把埠改為沒有是使用的埠。  
  <Connector port="8080" maxHttpHeaderSize="8192"  
  maxThreads="150" minSpareThreads="25" maxSpareThreads="75"  
  enableLookups="false" redirectPort="8443" acceptCount="100"  
  connectionTimeout="20000" disableUploadTimeout="true" /> 把埠改為沒有是使用的埠。  
	<Connector port="8009"  
  enableLookups="false" redirectPort="8443" protocol="AJP/1.3" /> 把埠改為沒有是使用的埠。  

     2.7成功! 

總結:在遇到問題時,首先應分析問題產生的原因,然後整理解決的思路,思路很重要,如何分析呢,看日誌,重要的事情說三遍,看日誌,看日誌,see logs。然後根據相應資訊查詢問題原因,參考別人的意見時,也要結合自己的實際情況。最主要的是不要怕錯,動手去做。你想擁有你從未擁有的東西,就要去做你從未做過的事。加油。