springboot的web項目的啟動主要分為:
一.使用內置tomcat啟動
啟動方式:
1、IDEA中main函數啟動
2、mvn springboot-run 命令
3、java -jar XXX.jar
配置內置tomcat屬性:
關於Tomcat的屬性都在org.springframework.boot.autoconfigure.web.ServerProperties配置類中做了定義,我們只需在application.properties配置屬性做配置即可。通用的Servlet容器配置都已”server”左右前綴,而Tomcat特有配置都以”server.tomcat”作為前綴。下面舉一些常用的例子。
配置Servlet容器:
配置Tomcat:
二.使用外置tomcat部署
配置步驟:
1、繼承SpringBootServletInitializer
外部容器部署的話,就不能依賴於Application的main函數了,而是要以類似於web.xml文件配置的方式來啟動Spring應用上下文,此時我們需要在啟動類中繼承SpringBootServletInitializer並實現configure方法:
這個類的作用與在web.xml中配置負責初始化Spring應用上下文的監聽器作用類似,只不過在這里不需要編寫額外的XML文件了。
2、pom.xml修改tomcat相關的配置
首先介紹下maven中scope依賴范圍的概念,因為后續涉及到這個會有問題。
依賴范圍就是用來控制依賴和三種classpath(編譯classpath,測試classpath、運行classpath)的關系,Maven有如下幾種依賴范圍:
compile:編譯依賴范圍。如果沒有指定,就會默認使用該依賴范圍。使用此依賴范圍的Maven依賴,對於編譯、測試、運行三種classpath都有效。典型的例子是spring-code,在編譯、測試和運行的時候都需要使用該依賴。
test: 測試依賴范圍。使用次依賴范圍的Maven依賴,只對於測試classpath有效,在編譯主代碼或者運行項目的使用時將無法使用此依賴。典型的例子是Jnuit,它只有在編譯測試代碼及運行測試的時候才需要。
provided:已提供依賴范圍。使用此依賴范圍的Maven依賴,對於編譯和測試classpath有效,但在運行時候無效。典型的例子是servlet-api,編譯和測試項目的時候需要該依賴,但在運行項目的時候,由於容器以及提供,就不需要Maven重復地引入一遍。
如果要將最終的打包形式改為war的話,還需要對pom.xml文件進行修改,因為spring-boot-starter-web中包含內嵌的tomcat容器,所以直接部署在外部容器會沖突報錯。這里有兩種方法可以解決,如下
方法一:
在這里需要移除對嵌入式Tomcat的依賴,這樣打出的war包中,在lib目錄下才不會包含Tomcat相關的jar包,否則將會出現啟動錯誤。
還有一個很關鍵的關鍵點,就是tomcat-embed-jasper中scope必須是provided。
因為SpringBootServletInitializer需要依賴 javax.servlet,而tomcat-embed-jasper下面的tomcat-embed-core中就有這個javax.servlet,如果沒用provided,最終打好的war里面會有servlet-api這個jar,這樣就會跟tomcat本身的沖突了。這個關鍵點同樣適應於下面說的第二種方法。
方法二:
直接添加如下配置即可:
provided的作用上面已經介紹的很透徹了,這里就不啰嗦了,這種方式的好處是,打包的war包同時適合java -jar命令啟動以及部署到外部容器中。
3、由jar變成war
<packaging>war</packaging>
4、注意的問題
此時打成的包的名稱應該和application.properties的
server.context-path=/test
保持一致
5、idea中配置外嵌tomcat
————————————————
版權聲明:本文為CSDN博主「lmdsoft」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/lmdsoft/article/details/82863795