1.將項目的啟動類Application.java繼承SpringBootServletInitializer並重寫configure方法
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.web.servlet.MultipartConfigFactory; import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; import org.springframework.context.annotation.Bean; import javax.servlet.MultipartConfigElement; @SpringBootApplication public class Application extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return application.sources(Application.class); } public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
2.在pom.xml文件中,project下面增加package標簽
<packaging>war</packaging>
1:創建一個目錄: /var/www
2:為將要部署的項目創建一個目錄, /var/www/my_project
3:將項目打成 war 包, 然后解壓到 /var/www/my_project
4:最終的目錄結構為:/var/www/my_project/WEB-INF,也即 WEB-INF 在項目名稱目錄之下
5:修改 TOMCAT_HOME/conf/ server.xml 文件找到 Host 標記,在其中添加如下子標記:
<Context path="" docBase="/var/www/my_project" reloadable="false" />
6:注意 Host 標記中的 appBase 屬性不要去修改,讓其為默認值 "webapps"
7:啟動 tomcat 打完收工
第一個關鍵點:以上配置中項目是部署在了 TOMCAT_HOME/webapps 目錄之外的,這樣做是為了避免 tomcat 加載項目兩次的坑,因為配置文件中如果配置了該項目會被加載一次,而項目在 webapps 下面又會被自動重復加載一次,這個坑會引發一些莫名奇妙的問題,例如:老版本的tomcat中,多人同時登錄后session產生混亂,再例如:有些項目有定時任務,如果重復加載項目,那么定時任務也會被執行多次。所以記住第一點,永遠不要將項目放在 TOMCAT_HOME/webapps 目錄下面。
第二個關鍵點:以上配置中的 Context 標記的 path 屬性一定要設置為 "" 而不是 "/",否則也會跳入一個坑。 docBase 屬性后面放項目名稱的絕對地址, windows 下則是類似於這樣的值: d:/www/my_project。