分享

Jetty、Undertow容器及war包部署到外置Tomcat容器

 码农9527 2021-08-23

上一节中我们了解到在SpringBoot项目中webServer默认支持的嵌入式容器是Tomcat,还可以切换到Jetty、Undertow。本节我们就将Tomcat切换到jetty、undertow容器。  

由于SpringBoot将Tomcat作为默认的应用容器,因此在使用Jetty和Undertow容器之前要先把Tomcat的jar包排除掉。  

<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>12345678910复制代码类型:[java]

使用Jetty容器:  

<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-jetty</artifactId>
</dependency>1234复制代码类型:[java]

使用Undertow容器:  

<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-undertow</artifactId>
</dependency>1234复制代码类型:[java]

关于pom.xml文件配置,我们需要知道以上三者的优先级顺序是:  

Tomcat>Jetty>Undertow  

使用Jetty、Undertow时,必须将Tomcat容器移除掉  

使用Undertow时,需要将Jetty的依赖移除掉,因为Jetty的优先级高于Undertow  

使用Jetty时,Undertow的依赖可以不移除  

配置参数  

在官方文档编号11中可以找到关于Jetty、Undertow的配置参数:  

https://docs./spring-boot/docs/current/reference/html/application-properties.html#application-properties.server  

常用配置参数  

Jetty  

server.jetty.threads.acceptors要使用的接受器线程数,默认值为-1
server.jetty.threads.selectors要使用的选择器线程数,默认值为-1
server.jetty.threads.min工作线程池最小线程数量,默认值为8
server.jetty.threads.max工作线程池最大线程数量,默认值为200

Undertow  

server.undertow.threads.io创建的 I/O 线程数。默认值来自可用处理器的数量
server.undertow.threads.worker工作任务线程数。默认值是 I/O 线程数的 8 倍
server.undertow.url-charset用于url解码的字符集,默认值为UTF-8

在application.yml文件中的写法  

Jetty  

server:
  port: 8888
  jetty:
 # 要使用的接受器线程数,默认值为-1
 acceptors: -1
 # 要使用的选择器线程数,默认值为-1
 selectors: -1
 # 工作线程池最小线程数量,默认值为8
 min-threads: 8
 # 工作线程池最大线程数量,默认值为200
 max-threads: 2001234567891011复制代码类型:[java]

Undertow  

server:
  port: 8888
  undertow:
 # 创建的 I/O 线程数。默认值来自可用处理器的数量
 io-threads: 5
 # 工作任务线程数。默认值是 I/O 线程数的 8 倍
 worker-threads: 40
 # 用于url解码的字符集,默认值为UTF-8
 url-charset: UTF-8123456789复制代码类型:[java]

Undertow的性能和内存使用方面都优于Tomcat,在高并发系统中,Tomcat相对来说比较弱。  

在相同的机器配置下,模拟相等的请求数,Undertow在性能和内存使用方面都是最优的。  

在之前我们所有的应用代码都是用jar包的方式去运行的,下面我们来学习如何打war包。  

为了方便演示,重新创建一个SpringBoot项目。重新创建的过程与之前想同,需要注意的是打包方式这次直接选择war包:  

新的项目创建好后,在com.example.demo文件夹下创建controller文件夹并在其中创建TemplateController.java  

package com.example.demo.controller;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RestController;@RestControllerpublic class TemplateController { @GetMapping("/template")
 public String test(String name) {  return "Hello " + name;
 }
}123456789101112复制代码类型:[java]

之后在pom.xml中的build代码段添加应用最终构建打包的名称:  

<finalName>family</finalName>1复制代码类型:[java]

在idea下方的Terminal中编写命令:  

mvn clean package1复制代码类型:[java]

打包结果将存储在项目的target目录下面,将war包移动到Tomcat的webapps目录中。  

在tomcat的bin目录下执行startup.sh(linux)/startup.bat(windows)。  

由于Tomcat在占用的是8080端口,所以在浏览器进行测试时输入的链接应为:http://localhost:8080/family/template?name=world  

得到返回结果。  

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多