Spring Boot如何使用Undertow代替Tomcat

1. Undertow 简介

Undertow 是一个采用 Java 开发的灵活的高性能 Web 服务器,提供包括阻塞和基于 NIO 的非堵塞机制。Undertow 是红帽公司的开源产品,是 Wildfly 默认的 Web 服务器。Undertow 提供一个基础的架构用来构建 Web 服务器,这是一个完全为嵌入式设计的项目,提供易用的构建器 API,完全向下兼容 Java EE Servlet 3.1 和低级非堵塞的处理器。

2. Undertow特点

  • 高性能 在多款同类产品的压测中,在高并发情况下表现出色。
  • Servlet4.0 支持 它提供了对 Servlet4.0 的支持。
  • Web Socket 完全支持,包括JSR-356,用以满足 Web 应用巨大数量的客户端。
  • 内嵌式 它不需要容器,只需通过 API 即可快速搭建 Web 服务器。
  • 灵活性 交由链式Handler配置和处理请求,可以最小化按需加载模块,无须加载多余功能。
  • 轻量级 它是一个 内嵌Web 服务器, 由两个核心 Jar 包组成

3. 替换默认的Tomcat

Spring boot 默认使用 Tomcat 内嵌容器 。依赖于 spring-boot-starter-web 。我们只需要排除 Tomcat 依赖。引用Undertow 就可以了,maven 配置如下:

 <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>
  <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-undertow</artifactId>
  </dependency>

4. 自定义配置Undertow

其实到第三步已经可以愉快地玩耍了。你可以立即在 https://felord.cn 找到更多教程来学习Spring Boot。当然你也可以再折腾一番,通过在Spring Boot 配置文件application.yml中配置 ServerProperties 和ServerProperties.Undertow 的相关属性。 总结了一下比较陌生的ServerProperties.Undertow 的属性:

# 设置IO线程数, 它主要执行非阻塞的任务,它们会负责多个连接, 默认设置每个CPU核心一个线程
# 不要设置过大,如果过大,启动项目会报错:打开文件数过多
server:
 undertow:
   io-threads: 16
# 阻塞任务线程池, 当执行类似servlet请求阻塞IO操作, undertow会从这个线程池中取得线程
# 它的值设置取决于系统线程执行任务的阻塞系数,默认值是IO线程数*8
   worker-threads: 256
# 以下的配置会影响buffer,这些buffer会用于服务器连接的IO操作,有点类似netty的池化内存管理
# 每块buffer的空间大小,越小的空间被利用越充分,不要设置太大,以免影响其他应用,合适即可
   buffer-size: 1024
# 每个区分配的buffer数量 , 所以pool的大小是buffer-size * buffers-per-region
   buffers-per-region: 1024
# 是否分配的直接内存(NIO直接分配的堆外内存)
   direct-buffers: true

5. 总结

今天我们演示了如何用性能优良的 Undertow 来作为Spring Boot 的 Servlet Web 容器。其实在并发量不大的情况下 Undertow、和其它两款 Servlet Web 容器 Jetty 、Tomcat 的差距并不是很大。 Undertow 的优势是高并发下的吞吐量。你可以根据自己的实际需要来选择。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Springboot内置tomcat配置虚拟路径过程解析

    在Springboot中默认的静态资源路径有:classpath:/METAINF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/,从这里可以看出这里的静态资源路径都是在classpath中(也就是在项目路径下指定的这几个文件夹) 试想这样一种情况:一个网站有文件上传文件的功能,如果被上传的文件放在上述的那些文件夹中会有怎样的后果? 网站数据与程序代码不能有效分离: 当项目被打包成一个.jar文件部署时

  • Springboot如何切换默认的Tomcat容器

    代码如下 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spr

  • Java +Tomcat + SpringMVC实现页面访问示例解析

    window7下Java环境安装记录:  一.安装Tomcat 1.下载tomcat 7.0,解压,无需安装,放置到目录:D:\apache-tomcat-7.0.90. 2.配置系统环境变量,CATALINA_BASE=D:\apache-tomcat-7.0.90,CATALINA_HOME=D:\apache-tomcat-7.0.90,在Path中新增"%CATALINA_HOME%\lib;%CATALINA_HOME%\bin"的环境变量. 3.进入D:\apache-to

  • Tomcat启动springboot项目war包报错:启动子级时出错的问题

    今天公司springboot项目准备部署到测试服务器上进行测试,打包好war后放到tomcat里面启动后,前端文件能访问到,但是接口请求一直是404,一直找了很久的原因,tomcat启动是成功的,war打包的时候也提示build success了,tomcat启动日志发现报错: java.lang.IllegalStateException: 启动子级时出错   at org.apache.catalina.core.ContainerBase.addChildInternal(Containe

  • SpringBoot整合TomCat实现本地图片服务器代码解析

    后台控制层: public static final String HEAD_IMG_DIR = "D:/upload/"; // 本地存放图片路径 //图片上传 @RequestMapping("/upload") @ResponseBody public String upload(MultipartFile file) { //文件真实上传名字 String filename = file.getOriginalFilename(); //文件大小 Long

  • 使用 Spring Boot 内嵌容器 Undertow创建服务器的方法

    Undertow是一个Web服务器,那么它就需要具备的现代Web服务器的基本特性,比如Servlet,JSP,文件服务器,代理服务器,安全认证等.undertow目前已经实现了绝大多数功能,并且因为wildfly通过了JavaEE7 TCK认证,所以可以说Undertow是一个通过Servlet 3.1认证的Web服务器和容器.这篇文章只分析Undertow的主干流程上的主要功能,即undertow-core和undertow-servlet. 1.简介 Undertow是一个非常轻量并高性能的

  • springboot 基于Tomcat容器的自启动流程分析

    Springboot 内置了Tomcat的容器,我们今天来说一下Springboot的自启动流程. 一.Spring通过注解导入Bean大体可分为四种方式,我们主要来说以下Import的两种实现方法: 1.通过实现ImportSerlector接口,实现Bean加载: public class TestServiceImpl { public void testImpl() { System.out.println("我是通过importSelector导入进来的service");

  • SpringMVC Tomcat控制台乱码问题解决方案

    关于SpringMVC运行Tomcat控制台出现乱码的情况(在网上找到一种方法亲测有效) 找到tomcat文件夹中的conf包下的logging.properties中找到 java.util.logging.ConsoleHandler.encoding = UTF-8 将这行代码注销改为 java.util.logging.ConsoleHandler.encoding = GBK 重启tomcat即可! 关于SpringMVC提交表单时,网页出现乱码情况,有两种解决方法 方法一(自定义过滤

  • Spring Boot实现Undertow服务器同时支持HTTP2、HTTPS的方法

    前言 如今,企业级应用程序的高性能安全加密的常见场景是同时支持HTTP和HTTPS两种协议,这篇文章考虑如何让Spring Boot应用程序同时支持HTTP和HTTPS两种协议.Spring Boot的web容器已经有容器可以支持HTTP2了,这个例子中选择了Undertow高性能服务器作为Spring Boot的web容器. What-什么是HTTP2 HTTP2是HTTP协议自1999年HTTP1.1发布后的首个更新,主要基于SPDY协议.由互联网工程任务组(IETF)的 Hypertext

  • SpringBoot如何取消内置Tomcat启动并改用外接Tomcat

    这篇文章主要介绍了SpringBoot如何取消内置Tomcat启动并改用外接Tomcat,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1,修改pom.xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <!-- 去除内嵌t

随机推荐