1. 程式人生 > >Spring的內嵌Tomcat解析

Spring的內嵌Tomcat解析

Spring Boot 預設使用的是 Tomcat 作為內嵌的伺服器。所以,我們搭建一個 Web 工程將會變得非常的簡單。

內嵌的 Tomcat,一個Jar包執行

還記得,《Spring Boot 揭祕與實戰(一) 快速上手》講到的例子麼?我們來回顧下。
首先,修改 POM 檔案,新增依賴。

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-web</artifactId>
  4. </dependency>

建立Java程式碼

  1. @RestController
  2. @EnableAutoConfiguration
  3. publicclassRestfulApiWebDemo{
  4. @RequestMapping("/")
  5. String home(){
  6. return"Hello World!";
  7. }
  8. publicstaticvoid main(String[] args)throwsException{
  9. SpringApplication.run(RestfulApiWebDemo.class, args);
  10. }
  11. }

直接執行 Java 類,或者可以通過 “mvn spring-boot:run” 在命令列啟動該應用。會啟動一個內嵌的 Tomcat 伺服器執行在 8080 埠。訪問 “

http://localhost:8080” 可以看到頁面上顯示“Hello World!”。

此外,在 POM 檔案新增外掛。

  1. <plugin>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-maven-plugin</artifactId>
  4. </plugin>

在添加了外掛後,當執行 “mvn package” 進行打包時,會打包成一個可以直接執行的 JAR 檔案,使用 “java -jar” 命令就可以直接執行。

通過 Spring Boot 內嵌的 Tomcat 伺服器,我們通過一個 jar 包就可以執行一個 web 工程,這個也很符合微服務的場景,我們在正式環境只要部署一個 jar 即可,當然,我們還可以把這個 jar 部署在 docker 容器中執行,是不是非常方便呢?

如何定製內嵌 Tomcat

設定內嵌Tomcat的埠

Spring Boot 內嵌的 Tomcat 伺服器預設執行在 8080 埠。如果,我們需要修改Tomcat的埠,我們可以在 src/main/resources/application.properties 中配置Tomcat資訊。

  1. server.port=8089

現在,你可以重新執行上面的例子,看下是不是 Tomcat 的埠變成 8089 了。

設定內嵌Tomcat的最大執行緒數

我們還可以修改內嵌的 Tomcat 伺服器的最大執行緒數。

  1. server.tomcat.max-threads=1000

設定內嵌Tomcat的編碼

在一些場景下,我們可能需要改動 Tomcat 的編碼,例如是 GBK 還是 UTF-8。

  1. server.tomcat.uri-encoding = UTF-8

官方提供的常用配置引數

除了上面講到的3個場景外,我們還可以自定義設定路徑地址、 SSL等引數。

這裡列舉一些官方提供的常用配置引數,如果有特定需求,可以進行內嵌 Tomcat 的定製。

  1. server.tomcat.accesslog.enabled=false# Enable access log.
  2. server.tomcat.accesslog.pattern=common # Format pattern for access logs.
  3. server.tomcat.accesslog.prefix=access_log # Log file name prefix.
  4. server.tomcat.accesslog.rename-on-rotate=false# Defer inclusion of the date stamp in the file name until rotate time.
  5. server.tomcat.accesslog.suffix=.log # Log file name suffix.
  6. server.tomcat.background-processor-delay=30# Delay in seconds between the invocation of backgroundProcess methods.
  7. server.tomcat.basedir=# Tomcat base directory. If not specified a temporary directory will be used.
  8. server.tomcat.internal-proxies=10\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}|\\
  9. 192\\.168\\.\\d{1,3}\\.\\d{1,3}|\\
  10. 169\\.254\\.\\d{1,3}\\.\\d{1,3}|\\
  11. 127\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}|\\
  12. 172\\.1[6-9]{1}\\.\\d{1,3}\\.\\d{1,3}|\\
  13. 172\\.2[0-9]{1}\\.\\d{1,3}\\.\\d{1,3}|\\
  14. 172\\.3[0-1]{1}\\.\\d{1,3}\\.\\d{1,3}# regular expression matching trusted IP addresses.
  15. server.tomcat.max-threads=0# Maximum amount of worker threads.
  16. server.tomcat.min-spare-threads=0# Minimum amount of worker threads.
  17. server.tomcat.port-header=X-Forwarded-Port# Name of the HTTP header used to override the original port value.
  18. server.tomcat.protocol-header=# Header that holds the incoming protocol, usually named "X-Forwarded-Proto".
  19. server.tomcat.protocol-header-https-value=https # Value of the protocol header that indicates that the incoming request uses SSL.
  20. server.tomcat.redirect-context-root=# Whether requests to the context root should be redirected by appending a / to the path.
  21. server.tomcat.remote-ip-header=# Name of the http header from which the remote ip is extracted. For instance `X-FORWARDED-FOR`
  22. server.tomcat.uri-encoding=UTF-8# Character encoding to use to decode the URI.

War 包部署的使用細節

如果,我們還是希望通過 war 包的方式,部署到外部的 Tomcat 伺服器上, Spring Boot 也是支援的,不過需要一些額外的配置。

首先,要將最終的打包形式改為 war 包,所以需要將 packaging 的值修改為 war。

  1. <packaging>war</packaging>

接著,對依賴進行適當的配置,值得注意的是,在這裡需要移除對嵌入的 Tomcat 的依賴,這樣打出的 WAR 包中,在 lib 目錄下才不會包含 Tomcat 相關的JAR包。

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-web</artifactId>
  4. <exclusions>
  5. <exclusion>
  6. <groupId>org.springframework.boot</groupId>
  7. <artifactId>spring-boot-starter-tomcat</artifactId>
  8. </exclusion>
  9. </exclusions>
  10. </dependency>
  11. <dependency>
  12. <groupId>org.springframework.boot</groupId>
  13. <artifactId>spring-boot-starter-tomcat</artifactId>
  14. <scope>provided</scope>
  15. </dependency>

另外,為了保證編譯正確,還需要新增對 servlet-api 的依賴,因此新增如下的配置。

  1. <dependency>
  2. <groupId>org.apache.tomcat</groupId>
  3. <artifactId>tomcat-servlet-api</artifactId>
  4. <version>7.0.42</version>
  5. <scope>provided</scope>
  6. </dependency>

設定,打包後的專案訪問名稱,在<build>節點裡新增<finalName>內容。

  1. <build>
  2. <finalName>springboot-web-demo</finalName>
  3. </bulid>

如果我們想要將在外部的 Tomcat 伺服器部署的 WAR 包,就不能依賴於 RestfulApiWebDemo 的 main 函式,要以類似於 web.xml 檔案配置的方式來啟動 Spring 應用上下文,此時我們需要宣告一個類,這個類的作用與在 web.xml 中配置負責初始化 Spring 應用上下文的監聽器作用類似,只不過在這裡不需要編寫額外的 XML 檔案了。

  1. publicclassServletInitializerextendsSpringBootServletInitializer{
  2. @Override
  3. protectedSpringApplicationBuilder configure(SpringApplicationBuilder application){
  4. return application.sources(RestfulApiWebDemo.class);
  5. }
  6. }

大功告成,此時,我們可以通過 Maven 的 “mvn clean package” 打包出一個 war 包,並部署到外部的 Tomcat 伺服器執行。訪問 “http://localhost:8080/springboot-web-demo/” 可以看到頁面上顯示“Hello World!”。

總結

Spring Boot 預設使用的是 Tomcat 作為內嵌的伺服器。所以,我們搭建一個 Web 工程將會變得非常的簡單,只需要一個 jar 包即可執行。此外,我們還可以對內嵌的 Tomcat 進行一些定製,例如埠、最大執行緒數、編碼、 SSL 等。如果,我們還是希望通過 war 包的方式,部署到外部的 Tomcat 伺服器上, Spring Boot 也是支援的,不過需要一些額外的配置,這個配置過程也只需要幾個簡單的步驟即可實現。

原始碼

(完)

相關推薦

SpringTomcat解析

Spring Boot 預設使用的是 Tomcat 作為內嵌的伺服器。所以,我們搭建一個 Web 工程將會變得非常的簡單。 內嵌的 Tomcat,一個Jar包執行 還記得,《Spring Boot 揭祕與實戰(一) 快速上手》講到的例子麼?我們來回顧下。 首先,修改 POM 檔案,新增依賴。 <d

Spring Boot Tomcat的埠號的修改

操作非常的簡單,不過如果從來沒有操作過,也是需要查詢一下資料的,所以,在此我簡單的記錄一下自己的操作步驟以備後用! 1:我的Eclipse版本,不同的開發工具可能有所差異,不過大同小異 2:如何進入對應的設定介面? 2-1:通過除錯模式的選單按鈕進入對應的設

SpringTomcat&去Xml&除錯Mvc

菜瓜:今天聽到個名詞“父子容器”,百度了一下,感覺概念有點空洞,這是什麼核武器? 水稻:你說的是SpringMvc和Spring吧,其實只是一個概念而已,用來將兩個容器做隔離,起到解耦的作用,其中子容器可以拿到父容器的bean,父容器拿不到子容器的。但是SpringBoot出來之後這個概念基本就被淡化掉,沒有

Tomcat的專案部署

1、首先進入到存放jar包的目錄下(傳統專案是war包,內嵌tomcat專案的jar包) # cd 相關路徑 2、啟動jar包,一直執行,不隨著視窗關閉而停止 # nohup java -jar assistant.jar >temp.txt 2>&1 &

SpringBoot去除tomcat

SpringBoot內嵌tomcat,直接run Application即可,那麼我們如何去除內嵌的tomcat,使用自己的呢? 一、POM(去除內嵌tomcat後,需要新增servlet依賴) <dependency> <grou

基於Tomcat的應用開發

為什麼使用內嵌Tomcat開發?     開發人員無需搭建Tomcat的環境就可以使用內嵌式Tomcat進行開發,減少搭建J2EE容器環境的時間和開發時容器頻繁啟動所花時間,提高開發的效率. 怎麼搭建內嵌Tomcat環境呢?(以tomcat6和tomcat7為例) 在開發

在maven的web專案中tomcat外掛執行war包

0、環境要求 Unix System\windwos\macOSJDK 1.7+ Maven 3.0 or later  我測試的編譯環境是:macOS10.11.6和windows10jd

web開發tomcat的使用,告別複雜的配置

對於java web開發,最常使用的就是安裝tomcat,然後在ide中配置一大堆,然後在進行除錯。這種方式對很多新手來說很容易出錯。現在說一下使用內嵌的tomcat進行開發。 在tomcat官網,我們可以下載對應的內嵌tomcat,在官網長這樣。 下

SpringBoot BootTomcat

.... part prope ets val setname url chain port Spring Boot: SpringBoot-start-web 裏面依賴的環境中 如果是外部的Tomcat 容器,可以通過修改config進行配置 內嵌的呢?

015-Spring Boot 定制和優化Tomcat

web容器 ffi add nec app ase class new ont 一、內嵌web容器   參看http://www.cnblogs.com/bjlhx/p/8372584.html   查看源碼可知提供以下三種:      二、定制優化tomcat

request.getRequestURL() 獲取伺服器地址, nginx反向代理 host配置,與spring boot中tomcat的配合使用

tomcat使用了nginx反向代理,獲取的伺服器路徑變成了nginx中配置的內網地址,如果在同一臺伺服器上,就變成了127

Spring bootTomcat的臨時目錄被刪除導致檔案上傳不了-問題解析

目錄 1、問題 2.1、 為什麼需要使用這個/tmp/tomcat*? 2.2、那個 /tmp/tomcat* 目錄為什麼不存在? 三、解決辦法 修改 springboot

vcenter和外鏈數據庫的解析

內嵌 外鏈 vcenter支持內嵌和外鏈數據庫,也是其兩種常見的部署模式。vcenter支持內嵌,內嵌的數據庫默認是vpostgresql.內嵌數據庫適合小型部署,安裝簡單方便,無需配置ODBC小規模時可以選擇嵌入式數據庫,但大規模時通常選擇Oracle數據庫。另一點就是PSC,小規模也是內嵌,但大規

Spring Boot2.0之 原理—建立Tomcat容器

前面所述的https://www.cnblogs.com/toov5/p/9823728.html 中的第一條先不贅述了,就是玩了maven 重點介紹後兩條 首先內建Tomcat:   SpringBoot中內建tomcat伺服器   Java操作建立tomcat &n

配置spring boot tomcat的accessLog日誌

#配置內建tomcat的訪問日誌server.tomcat.accesslog.buffered=trueserver.tomcat.accesslog.directory=/home/hygw/logsserver.tomcat.accesslog.enabled=trueserver.tomcat.acc

SpringBoot定製和優化Tomcat

SpringBoot定製和優化內嵌的Tomcat Spring 預設集成了三種內嵌容器: tomcat jetty undertow Tomcat常用配置屬性 org.springframework.boot.autoconf

STS(Spring Tool Suite)裡面Tomcat配置

STS(Spring Tool Suite)裡面內建Tomcat配置,如圖: 這裡是配置的tomcat9。開啟配置路徑D:\devTools\sts-bundle\pivotal-tc-server 看一下: 目錄下三個資料夾, 重點看第二個“instances”,開啟之後如圖

Spring data mongodb的陣列的簡單使用(一)

最近公司需要使用mongodb作為一個無知的我,學習了一下,翻閱了大量的教程,簡單的就不說了。附個連結: http://www.runoob.com/mongodb/mongodb-tutorial.html 關於內嵌物件,當時搞得頭大。所以這裡總結一下,做個筆記。 1、JavaBean

Spring Boot資料庫的使用(H2)

Spring FrameWork提供對於SQL資料庫提供了非常廣泛的支援,從直接使用JdbcTemplate的JDBC到類似Hibernate等完備的ORM技術。Spring Data提供一個額外的功能, 直接從介面建立Repository實現, 並使用約定從你

JavaWeb之Jetty和Tomcat伺服器實現

在開發Java web專案時候,有時候需要使用內嵌伺服器作為來執行web程式。 現在介紹Java中常用的兩種伺服器Tomcat和jetty,實現web伺服器的內嵌.  1.Jetty伺服器的內嵌       Jetty是一個Java實現的開源的servlet容器,它既可以像