[實用篇] tomcat重新部署war檔,不用備份webapp目錄中的檔案(文件、圖片)
一、前言
在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
七、結論
筆者自從使用此方法後就大幅減少佈署流程時間,只需要一分鐘就可以完成系統的重新佈署。也避免使用搬移檔案時,可能造成檔案遺失的風險。