[實用篇] tomcat重新部署war檔,不用備份webapp目錄中的檔案(文件、圖片)

姜志民 2019/08/06 11:04:27
5212

一、前言

在Tomcat每次重新佈署war檔時,Tomcat會自動將清空webapp目錄下有關使用者上傳的任何東西,例如:檔案、圖片…等。

所以在重新佈署war檔之前,必須手動將使用者上傳的任何東西備份到另一個目錄,待war檔佈署完成後,在手動將東西還原回去webapp目錄。

若每次重新佈署war檔都要經歷上述的步驟,都手動處理的話,容易出錯又需要大量時間處理。此文章將介紹如何解決此困擾。

 

二、筆者-實際案例

筆者負責維護公司一個內部系統,此系統是用Linux + Tomcat 架構,因為使用者在操作系統會上傳大量的圖片與產生Html檔案,日積月累下來webapp目錄的容量已經達到3 GB,在搬移檔案會變的非常耗時。

導致每次佈署新版的war檔都必須將使用者上傳的檔案先搬移到別的目錄,待新版的war檔佈署完成再將檔案搬回原來目錄,筆者曾經也遇過檔案並沒有成功搬回,又必須重新做一次搬檔案動作,也讓佈署流程往往花掉筆者快一小時的時間。

 

三、解決方式

透過作業系統的「捷徑」方式與在Tomcat設定XML檔案就可以達到每次重新佈署war檔,不須手動將使用者上傳的任何東西搬到別的目錄下暫存。

在Windows與Linux作業系統的解決實作方式也不一樣,在後續步驟會一一介紹。

 

四、未使用「捷徑」部署流程 V.S 使用「捷徑」部署流程

a.未使用「捷徑」部署流程

 

b.使用「捷徑」部署流程

 

五、Windows作業系統環境-解決方式

a.說明:將webapp目錄下有關使用者上傳的目錄先搬移到別的目錄後,在webapp目錄下利用mklink建立連結點到使用者上傳的目錄。

b.建立連結點(Junction),打開「命令提示字元」應用程式,輸入此指令。

指令:mklink /j [Link] [Target]

mklink /j "C:\Program Files\apache-tomcat-8.5.27\webapps\kms-0.0.1-SNAPSHOT\notes\allNotes\files" "D:\KMS\files"

 

c.移除連結點(Junction)

指令:rmdir [Link],打開「命令提示字元」應用程式,輸入此指令。

rmdir "C:\Program Files\apache-tomcat-8.5.27\webapps\kms-0.0.1-SNAPSHOT\notes\allNotes\files"

 

六、Linux作業系統環境-解決方式

a.說明:將webapp目錄下有關使用者上傳的目錄先搬移到別的目錄後,在webapp目錄下利用mklink建立連結點到使用者上傳的目錄。

b. Tomcat 7設定

打開Tomcat目錄下的conf\context.xml檔案找到<Context>標籤,加入allowLinking="true",最後會變成<Context allowLinking="true">,如下圖。

 

c. Tomcat 8 & 9設定

打開Tomcat目錄下的conf\context.xml檔案找到<Context>標籤,加入一組新的標籤<Resources allowLinking="true"></Resources>,如下圖:

 

d.建立軟連結 (Symbolic Link)

指令:ln -s [Target] [Link-Name],在linux console下輸入此指令。

ln -s /opt/tpu/File /opt/apache-tomcat-7.0.64/webapps/tpu/File

 

e.移除軟連結 (Symbolic Link)

指令:ln -s [Link-Name],在linux console下輸入此指令。

unlink /opt/apache-tomcat-7.0.64/webapps/tpu/File

 

七、結論

筆者自從使用此方法後就大幅減少佈署流程時間,只需要一分鐘就可以完成系統的重新佈署。也避免使用搬移檔案時,可能造成檔案遺失的風險。

 

 

 

姜志民