背景
現在有好幾個 war 包需要部署到 Tomcat 上,而且都要求直接放在 ROOT 目錄下,即不能產生多餘的上下文。
1 環境準備
可以參考我的這篇博文的第3章。安裝好 Tomcat 並明白如何部署 war 包。
2 實現多開
2.1 基本原理
CATALINA 是 Tomcat 的 servlet 容器,我們可以指定不同的 CATALINA_HOME 來同時啟動多個 Tomcat 。
2.2 實現
在合適的地方建立一個資料夾用來存放後續建立的多開 Tomcat 的資料夾,這裡我就放在 Tomcat 的根目錄下,命名為 /moreCats 。
在 /moreCats 下建立 /cat1 和 /cat2 2個目錄,複製原 Tomcat 根目錄下的這幾個資料夾到 /cat1 和 /cat2 中。
/conf
/logs
/temp
/webapps
/work
以下以 /cat1 舉例, /cat2 同理。
在 /cat1 目錄下建立 start.bat 啟動指令碼。
@echo off
REM 啟動第1個Tomcat例項
REM 將這裡設定為你自己的真實目錄
set "CATALINA_BASE=D:\coding_work\apache-tomcat-9.0.64\moreCats\cat1"
call "%CATALINA_HOME%\bin\startup.bat"
修改 /cat1/conf/server.xml 中的埠配置,多個 Tomcat 示例埠不能重複。
<!--需要修改HTTP、AJP和Shutdown-->
<Server port="8005" shutdown="SHUTDOWN">
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
把上面的3個埠設定不重複就行了。
然後使用啟動指令碼啟動即可。
最後展示下改造後的目錄結構。
apache-tomcat-9.0.64/
├── bin/
├── conf/
├── lib/
├── logs/
├── temp/
├── webapps/
├── work/
├── moreCats/
│ ├── cat1/
│ │ ├── conf/
│ │ │ └── server.xml
│ │ ├── lib/
│ │ ├── logs/
│ │ ├── webapps/
│ │ ├── work/
│ │ └── start.bat
│ ├── cat2/
│ │ ├── conf/
│ │ │ └── server.xml
│ │ ├── lib/
│ │ ├── logs/
│ │ ├── webapps/
│ │ ├── work/
│ │ └── start.bat
注意事項:
- 環境變數:確保批處理指令碼中每次啟動不同例項時使用的是正確的 CATALINA_BASE 。
- 埠號衝突:不同的例項需要在 server.xml 中設定不同的 HTTP 、AJP 和 Shutdown 埠,避免衝突。
- 日誌管理:每個例項的日誌將儲存在各自的 logs 目錄下,便於管理和分析。