你知道怎么在生產環境下部署tomcat嗎?

享學課堂特邀作者:老顧
轉載請聲明出處!

一、前言

小伙伴們在網上看到的很多文章,都是對tomcat的一些介紹,什么配置啊,怎么啟動。其實在生產環境中怎么部署,和網上介紹的有很大區別。這篇文章老顧就帶著大家分享一些如何在生產環境下部署。

二、tomcat組件

我們先回顧一下tomcat有哪些組件

我們小伙伴要抓住幾個點

  1. 對外接收請求是Connector連接器組件,可以支持不同協議,Connector組件中可設置端口,所以我們請求的時候需要輸入端口號。可以把Connector當作接待員。

  2. Connector組件接收到請求后,轉發給處理**Engine(catalina引擎)**組件去處理。

  3. 根據請求的域名,分配到對應的Host主機。

  4. 在根據path分配context組件

區分項目有2個核心組件,一個是host,一個是context。根據域名和path分配不同的項目。其實還少了一個就是啟動參數的配置,也就是一同的項目啟動參數也可以不一樣,如端口號啊。

三、部署目錄

我們先看一下Tomcat目錄結構:

--bin //存放著tomcat啟動和關閉腳本--conf //存放著tomcat服務器的各種配置文件--lib //tomcat服務器和所有web應用所屬的jar文件--logs //存放著Tomcat的日志文件--temp //存放著Tomcat的運行時產生的臨時文件--webapps //把web應用放到此目錄即可--work //Tomcat將jsp生成的servlet源文件和字節碼文件放到此目錄

我們要部署一個web應用,只要把應用的war包放到webapps就可以了。網上一般也是這么講的。小伙伴們覺得有什么問題嗎

我們看一下,如果我們要部署兩個web應用Web-A和Web-B,把他放到webapps中。我們到bin目錄下運行startup.sh啟動,這樣web-A和web-B就可以訪問了。

如果現在業務上需要把web-B先暫停,那我們改怎么辦?還有就是tomcat啟動是會有啟動參數設置,如最大線程數,最小線程數等配置。那web-A和web-B怎么配置不一樣的啟動參數呢?

其實還有一個問題,如果我們要把**tomcat版本升級,怎么辦?**把tomcat直接覆蓋?那些web應用重新部署?

小伙伴們,應該怎么辦呢?

四、目錄規劃

tomcat軟鏈接

我們先把tomcat應用放到/usr/local目錄下

# cd /usr/local# lldrwxr-xr-x.  9 root root  220 5月   8 19:23 apache-tomcat-8.5.40

上面我們是應用了tomcat8.5版本,如果我們需要升級到9.x版本的話,如果我們需要升級到9.x版本的話,那關于tomcat目錄的路徑就需要重新修改,這就太不方便了,所以我們可以用軟鏈接的方式解決這個問題

# ln -s apache-tomcat-8.5.40 tomcat# lldrwxr-xr-x.  9 root root  220 5月   8 19:23 apache-tomcat-8.5.40lrwxrwxrwx.  1 root root   20 5月   8 16:42 tomcat -> apache-tomcat-8.5.40

這樣以后用tomcat應用路徑,就直接使用tomcat這個軟鏈接,即使將來tomcat升級只要修改一些軟鏈接就行了,其他就不需要改。

目錄分離

我們應該要把tomcat和web應用目錄分離出來,即使tomcat升級也跟web應用沒有關系。那分離出來,怎么啟動呢?

我們要利用啟動參數中的CATALINA_HOME和CATALINA_BASE,來指定tomcat程序應用和web應用;通過CATALINA_BASE就可以實現web應用分離出去,我們來看一些tomcat一共有哪些啟動參數

啟動參數描述說明
JAVA_OPTjvm啟動參數,設置內存 編碼等-Xms100m -Xmx200m -Dfile.encoding=UTF-8
JAVA_HOME指定jdk目錄
CATALINA_HOMEtomcat程序根目錄
CATALINA_BASE應用部署目錄,默認為 $CATALINA_HOME
CATALINA_OUT應用日志輸出目錄,默認為$CATALINA_BASE/logs
CATALINA_TMPDIR應用臨時目錄,默認為$CATALINA_BASE/temp

我們先在/usr/local目錄下新建一個web-apps目錄,此目錄就放web應用

# mkdir web-apps
# ll
lrwxrwxrwx.  1 root root   20 5月   8 16:42 tomcat -> apache-tomcat-8.5.40
drwxr-xr-x.  2 root root    6 5月   8 20:29 web-apps

在web-apps目錄下,新建web-a和web-b目錄,這兩個目錄就是web-A和web-b的web應用目錄。

# cd web-apps/
# mkdir web-a
# mkdir web-b
# ll
drwxr-xr-x. 2 root root 6 5月   8 20:33 web-a
drwxr-xr-x. 2 root root 6 5月   8 20:33 web-b

把tomcat程序中的conf目錄拷貝到web-a和web-b里面,這樣各個web應用都有各自的配置文件。

# cp -r /usr/local/tomcat/conf /usr/local/web-apps/web-a/ 
# cp -r /usr/local/tomcat/conf /usr/local/web-apps/web-b/ 

再在web-a和web-b目錄下,新建webapps和logs目錄,webapps存放web應用,logs存放日志文件。

到此目錄分離開了,但還缺少一個啟動腳本

五、啟動腳本

此啟動腳本,老顧引用了網上的一個腳本改造了一下,命名為tomcat.sh

#!/bin/bash
export JAVA_OPTS="-Xms100m -Xmx200m"
export JAVA_HOME="/usr/java/jdk1.8.0_181"
export CATALINA_HOME="/usr/local/tomcat"
export CATALINA_BASE="`pwd`"case $1 instart)$CATALINA_HOME/bin/catalina.sh startecho start success!!;;stop)$CATALINA_HOME/bin/catalina.sh stopecho stop success!!;;restart)$CATALINA_HOME/bin/catalina.sh stopecho stop success!!sleep 2$CATALINA_HOME/bin/catalina.sh startecho start success!!;;version)$CATALINA_HOME/bin/catalina.sh version;;configtest)$CATALINA_HOME/bin/catalina.sh configtest;;
esac
exit 0

腳本比較簡單,核心就是啟動參數,只要注意CATALINA_BASE="pwd"的意思是,執行腳本的路徑,也就是代表web應用路徑是腳本執行的路徑;再把tomcat.sh設置一些啟動權限 # chmod +x tomcat.sh?。

修改conf下的server.xml

<Host name="localhost"  appBase="webapps"unpackWARs="true" autoDeploy="true"><Context path="/" docBase="" reloadable="true" /><Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"prefix="localhost_access_log" suffix=".txt"pattern="%h %l %u %t &quot;%r&quot; %s %b" />
</Host>

修改了紅色字體部分,host中的appBase是相對CATALINA_BASE的路徑,就是web應用的路徑,context中的path是請求url,docBase也是相對路徑,相對于appBase的,當然也可以設置絕對路徑。在web-a下創建index.html文件

到現在為止的web-a的目錄下

# ll
drwx------. 3 root root 254 5月   8 22:05 conf
drwxr-xr-x. 2 root root 197 5月   8 21:27 logs
-rwxr-xr-x. 1 root root 598 5月   8 21:21 tomcat.sh
drwxr-xr-x. 2 root root  24 5月   8 21:25 webapps
# ll webapps/
-rw-r--r--. 1 root root 12 5月   8 21:25 index.html

啟動tomcat.sh

# ./tomcat.sh start

訪問?http://192.168.31.150:8080/?就ok了,直接返回了index.html里面的內容。

需要說明的是,在web-a執行tomcat.sh,里面的啟動參數**CATALINA_BASE是web應用路徑,那tomcat.sh腳本中的$CATALINA_HOME/bin/catalina.sh 這個腳本執行所采用的conf配置文件是web-a目錄下的,**跟tomcat程序的conf沒有任務關系,也跟web-b目錄下的conf也沒有任何關系,這樣就達到了應用之間的配置分離。

補充一下,**在配置context和host時,很多公司不會在server.xml配置,而是通過conf/Catalina目錄下,新建host和context,**這個知識點,網上很多,小伙伴們可自行查看,因為我們已經單應用分離出來了,那樣的配置好處不大。

六、總結

上面老顧介紹了tomcat在生產環境的部署要點,其實還缺少一個環節,就是我們war包或jar包是按照什么流程以及方式上傳到生產環境的?這個留個懸念,下次老顧會介紹。

總結

上述知識點,囊括了目前互聯網企業的主流應用技術以及能讓你成為“香餑餑”的高級架構知識,每個筆記里面幾乎都帶有實戰內容。

很多人擔心學了容易忘,這里教你一個方法,那就是重復學習。

打個比方,假如你正在學習 spring 注解,突然發現了一個注解@Aspect,不知道干什么用的,你可能會去查看源碼或者通過博客學習,花了半小時終于弄懂了,下次又看到@Aspect 了,你有點郁悶了,上次好像在哪哪哪學習,你快速打開網頁花了五分鐘又學會了。

資料領取方式:戳這里免費領取

從半小時和五分鐘的對比中可以發現多學一次就離真正掌握知識又近了一步。

人的本性就是容易遺忘,只有不斷加深印象、重復學習才能真正掌握,所以很多書我都是推薦大家多看幾遍。哪有那么多天才,他只是比你多看了幾遍書。
學會了。

資料領取方式:戳這里免費領取

從半小時和五分鐘的對比中可以發現多學一次就離真正掌握知識又近了一步。

[外鏈圖片轉存中…(img-YV84jmMb-1623614617860)]

人的本性就是容易遺忘,只有不斷加深印象、重復學習才能真正掌握,所以很多書我都是推薦大家多看幾遍。哪有那么多天才,他只是比你多看了幾遍書。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/386074.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/386074.shtml
英文地址,請注明出處:http://en.pswp.cn/news/386074.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

淺談HashMap

Java集合類的整體架構 比較重要的集合類圖如下&#xff1a; 有序否 允許元素重復否 Collection 否 是 List 是 是 Set AbstractSet 否 否 HashSet TreeSet 是&#xff08;用二叉樹排序&#xff09; Map AbstractMap 否 使用 key-value 來映射和存儲數據&#xff0c; Key 必須惟…

matlab實現一元線性回歸和多元線性回歸

在回歸分析中,如果有兩個或兩個以上的自變量,就稱為多元回歸。事實上,一種現象常常是與多個因素相聯系的,由多個自變量的最優組合共同來預測或估計因變量,比只用一個自變量進行預測或估計更有效,更符合實際。 在實際經濟問題中,一個變量往往受到多個變量的影響。例如,家…

互聯網寒冬!“996”為什么還沒實行?我還等著早點下班呢!

“喊了十多個月的‘996’&#xff0c;說要實行‘996’&#xff0c;上班上到現在&#xff0c;影子都沒看到&#xff0c;我還能早點下班嗎&#xff1f;” 我一個在廣州上班的朋友小李&#xff0c;在我去廣州出差期間&#xff0c;與他聊天的時候發出了這樣的牢騷&#xff0c;我剛…

matlab求解常微分方程組/傳染病模型并繪制SIR曲線

看了很多關于傳染病模型的matlab程序,大都是繪制出兩條曲線(I、S)的,本文最大的不同是繪出SIR三條曲線。 先給出SIR微分方程組 函數文件: run的程序:

互聯網寒冬!技術站最全MySQL數據庫實戰規范

享學課堂特邀作者&#xff1a;老顧 轉載請聲明出處&#xff01; 前言 我們小伙伴們經常使用到mysql數據庫&#xff0c;一般就這么一用&#xff0c;很少會考慮mysql里面的細節問題&#xff0c;如sql語句的規范&#xff0c;或索引有沒有起到相應的效果&#xff0c;今天老顧就給大…

SQL求一個表中非重復數據及其出現的次數

mysql中&#xff0c;我們可以用distinct求不重復的數據有多少&#xff0c;也可以用group by。 這里有個例子&#xff0c;如下表sheet1&#xff0c;共有5411條數據 查詢語句 共有3446條不重復數據&#xff0c;每條不重復數據出現的次數在第二列顯示&#xff1a;

什么是微服務擴展性和高可用-可擴展性、高可用性和性能

歡迎關注專欄&#xff1a;Java架構技術進階。里面有大量batj面試題集錦&#xff0c;還有各種技術分享&#xff0c;如有好文章也歡迎投稿哦。 Overview 可擴展性、高可用性和性能 術語可擴展性、高可用性、性能和關鍵任務對于不同的組織或組織內的不同部門來說可能意味著不同的…

SQL實現當前行等于前面兩行數據之和

sql實現類似斐波那契數列的功能&#xff0c;即當前數據等于前面兩個數據之和&#xff0c;詳看本文例子 原表&#xff1a; sql語句&#xff08;此處要熟悉JION ON的用法&#xff09; 結果

【大牛系列教學】靠著這份面試題跟答案

開篇閑扯 打工人&#xff0c;打工魂&#xff0c;我們生而人上人。當“資本主義”逐漸禁錮我們人&#xff08;大&#xff09;上&#xff08;韭&#xff09;人&#xff08;菜&#xff09;肉體的時候&#xff0c;那一刻我才明白那個日不落帝國資本主義收割機瑞民族之光幸瑞幸咖啡…

matlab實現二項分布

二項分布 1. 求n次獨立重復試驗中事件A恰好發生k次的概率P。 命令:pdf 或 binopdf 格式:pdf (‘bino’, k, n, p) 或 binopdf (k, n, p) 說明:該命令的功能是計算二項分布中事件A恰好發生k次的概率。pdf為通用函數,bino表示二項分布,binopdf為專用函數,n為試驗總次數,…

【工作感悟】成功入職阿里月薪45K

前言 苦苦尋覓找工作之間&#xff0c;殊不知今日之時乃我心之痛&#xff0c;難道是我不配擁有工作嘛。自面試后他所謂的等待都過去一段時日&#xff0c;可惜在下京東上的小金庫都要見低啦。每每想到不由心中一緊。正處為難之間&#xff0c;手機忽然來了個短信預約后續面試。 我…

Mysql優化技巧

索引優化&#xff0c;查詢優化&#xff0c;查詢緩存&#xff0c;服務器設置優化&#xff0c;操作系統和硬件優化&#xff0c;應用層面優化&#xff08;web服務器&#xff0c;緩存&#xff09;等等。這里的記錄的優化技巧更適用于開發人員&#xff0c;都是從網絡上收集和自己整理…

【工作經驗分享】不會真有人覺得mybatis很難學吧

什么是自旋鎖和互斥鎖&#xff1f; 由于CLH鎖是一種自旋鎖&#xff0c;那么我們先來看看自旋鎖是什么&#xff1f; 自旋鎖說白了也是一種互斥鎖&#xff0c;只不過沒有搶到鎖的線程會一直自旋等待鎖的釋放&#xff0c;處于busy-waiting的狀態&#xff0c;此時等待鎖的線程不會…

華為面試題

技術面試&#xff1a; java&#xff1a; java學了幾年&#xff0c;看過什么書&#xff0c;有沒有看過thinking in java這本書 java的公共父類是什么&#xff0c;object類中有什么方法 object中有個hashcode方法&#xff0c;這個方法是用來做什么的&#xff0c; equal 與 的區…

【工作經驗分享】這些新技術你們都知道嗎

前言 近年來&#xff0c;微服務架構(Microservices Architecture)已經成為一種主流的軟件開發方法論&#xff0c;所謂微服務( Microservices ),就是一些具有足夠小的粒度、能夠相互協作且自治的服務體系。 微服務架構基于分布式系統&#xff0c;同時借助了面向服務架構和企業服…

京東面試題(JAVA)

京東17號一面問題與回答情況&#xff08;Java崗&#xff09; 作者&#xff1a;牛客190525號 Q1: HashMap的原理, 以及HashMap如何擴充bucket的大小 A1: 原理答上來了&#xff0c;如何擴容瞎答的&#xff0c;之前不知道擴容之后已經哈希的MapEntry如何處理&#xff0c;當時就…

【微信小程序】使用Hystrix的插件機制

前言 在本篇文章開始前&#xff0c;我想想來回答一個問題&#xff1a;我為什么要寫這一篇關于面試的文章&#xff1f; 原因有三&#xff1a;第一&#xff0c;我想為每一個為夢想時刻準備著的”有心人“盡一份自己的力量&#xff0c;提供一份高度精華的Java面試清單&#xff1…

大話數據結構——數據結構緒論

數據&#xff1a;描述客觀事物的符號&#xff0c;是計算機可以操作的對象&#xff0c;是能被計算機識別&#xff0c;并輸入給計算機處理的符號集合。 有兩個要素&#xff1a; 可以輸入到計算機中能被計算機程序處理 數據元素&#xff1a;組成數據的基本單位&#xff0c;也就…

【微信小程序】目前最全的《Java面試題及解析》

開頭 在找工作的過程中&#xff0c;對于 Redis 技術知識的掌握已經成為必須的技能。美團面試常常就會被問到Redis相關知識&#xff0c;而這次我就差點倒在了美團3面&#xff0c;面試官連問我以下幾個Redis的問題&#xff0c;然后就卡殼了… redis了解嗎&#xff1f;你說說怎么…

大話數據結構——算法

算法&#xff1a;算法是解決特定問題求解步驟的描述&#xff0c;在計算機中表現為指令的有限序列&#xff0c;并且每條指令表示一個或多個操作。 為什么把數據結構和算法一起說&#xff1f; 想想羅密歐與朱麗葉&#xff0c;梁山伯和祝英臺&#xff0c;少了一個你總會覺得奇怪…