1 springboot
項目相關
1.1 修改pom.xml
文件依賴
如果要將最終的打包形式改為war
的話,還需要對pom.xml
文件進行修改,因為spring-boot-starter-web
中包含內嵌的tomcat
容器,所以直接部署在外部容器會沖突報錯。這里有兩種方法可以解決,如下
方法一:
在web
依賴中去除tomcat
的依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
在這里需要移除對嵌入式Tomcat
的依賴,這樣打出的war
包中,在lib
目錄下才不會包含Tomcat
相關的jar
包,否則將會出現啟動錯誤。還有一個很關鍵的關鍵點,就是tomcat-embed-jasper
中scope
必須是provided
。
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
方法二:
因為SpringBootServletInitializer
需要依賴javax.servlet
,而tomcat-embed-jasper
下面的tomcat-embed-core
中就有這個javax.servlet
,如果沒用provided
,最終打好的war
里面會有servlet-api
這個jar
,這樣就會跟tomcat
本身的沖突了。這個關鍵點同樣適應于下面說的第二種方法。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
provided
的作用上面已經介紹的很透徹了,這里就不啰嗦了,這種方式的好處是,打包的war
包同時適合java -jar
命令啟動以及部署到外部容器中。
1.2 修改打包方式
<packaging>war</packaging>
1.3 修改啟動類
外部容器部署的話,就不能依賴于Application
的main
函數了,而是要以類似于web.xml文件配置的方式來啟動Spring應用上下文,此時我們需要在啟動類中繼承SpringBootServletInitializer
并實現configure
方法:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.support.SpringBootServletInitializer;
@SpringBootApplication
public class Chapter05Application extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Chapter05Application.class);
}
public static void main(String[] args) {
SpringApplication.run(Chapter05Application.class, args);
}
}
2 tomcat
相關
2.1 下載
2.2 解壓安裝
將安裝包移動到你想要的位置,然后解壓:
tar -zxvf apache-tomcat-8.5.34.tar.gz ./
重命名,這樣后面的操作可以少打一點字。
mv apache-tomcat-8.5.34 tomcat
設置環境變量
vim /etc/profile
在文件末尾中加入:
#set tomcat environment
CATALINA_HOME=/usr/local/tomcat
export CATALINA_HOME
重新加載環境變量的配置文件:
source /etc/profile
進入tomcat
文件夾
cd /usr/local/tomcat
編輯catalina.sh
文件:
vim bin/catalina.sh
在文檔前面加入:
CATALINA_HOME=/usr/local/tomcat
JAVA_HOME=/usr/local/java/jdk1.8.0_181
CATALINA_HOME
是tomcat
的安裝路徑,JAVA_HOME
是上面JDK的安裝路徑,把上面的路徑改成你自己的安裝路徑即可。
2.3 啟動tomcat
當前位置是/usr/local/tomcat
./bin/startup.sh
顯示下面信息,表示啟動成功:
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/local/java/jdk1.8.0_181
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
2.4 停止tomcat
./bin/shutdown.sh
2.5 檢測tomcat
是否安裝成功
瀏覽器訪問http://localhost:8080/會顯示tomcat的信息。
2.6 修改tomcat
端口
vim /usr/local/tomcat/conf/server.xml
找到8080端口的位置,將他修改為80。
2.7 將tomcat
設置為開機啟動
復制catalina.sh
到/etc/init.d
目錄下,并重命名為tomcat
cp /usr/local/tomcat/bin/catalina.sh /etc/init.d/tomcat
設置權限
chmod +x /etc/init.d/tomcat
在自啟動文件夾下創建tomcat
的軟(或硬)連接,K表示不自啟動,S表示自啟動。
ln -s /etc/init.d/tomcat /etc/rc2.d/S99tomcat
完成,重啟測試即可。
3 部署項目
刪除tomcat
的webapps
下的所有文件
rm -rf /usr/local/tomcat/webapps/*
將項目的war包上傳到tomcat
的webapps
下,并且重命名為ROOT.war
啟動tomcat,訪問http://localhost。
重啟測試tomcat是否正常啟動。