Spring Boot 2.x 教程系列 | 配置 Undertow 容器
程序员文章站
2022-05-14 09:45:01
欢迎关注微信公众号: 小哈学Java 文章首发于个人网站 "https://www.exception.site/springboot/spring boot undertow" 本节中,您将学习如何在 Spring Boot 中配置 Undertow 容器。配置之前,您需要知道的是,Tomcat, ......
欢迎关注微信公众号: 小哈学java
文章首发于个人网站
本节中,您将学习如何在 spring boot 中配置 undertow 容器。配置之前,您需要知道的是,tomcat, jetty, undertow 作为三大主流 servelt 容器,undertow 的性能要优于前两者。
所以,我们推荐您使用 undertow 容器。接下来,就我们看看如何在 spring boot 中快捷地集成 undertow。
一、添加 maven 依赖
<dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-web</artifactid> <!-- 移除掉默认支持的 tomcat --> <exclusions> <exclusion> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-tomcat</artifactid> </exclusion> </exclusions> </dependency> <!-- 添加 undertow 容器 --> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-undertow</artifactid> </dependency>
二、启动项目
添加完上面的 maven 依赖后,undertow 容器就已经集成完毕了,接下来,让我们启动项目,看看控制台输出:
connected to the target vm, address: '127.0.0.1:50915', transport: 'socket' . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: spring boot :: (v2.1.2.release) 2019-02-22 20:29:28.876 info 21908 --- [ main] s.e.s.springbootundertowapplication : starting springbootundertowapplication on desktop-rl6p6la with pid 21908 (c:\dev\idea_workspace_personal\spring-boot-tutorial\spring-boot-undertow\target\classes started by allen in c:\dev\idea_workspace_personal\spring-boot-tutorial) 2019-02-22 20:29:28.885 info 21908 --- [ main] s.e.s.springbootundertowapplication : no active profile set, falling back to default profiles: default 2019-02-22 20:29:34.388 warn 21908 --- [ main] io.undertow.websockets.jsr : ut026010: buffer pool was not set on websocketdeploymentinfo, the default pool will be used 2019-02-22 20:29:34.478 info 21908 --- [ main] io.undertow.servlet : initializing spring embedded webapplicationcontext 2019-02-22 20:29:34.478 info 21908 --- [ main] o.s.web.context.contextloader : root webapplicationcontext: initialization completed in 5449 ms 2019-02-22 20:29:35.471 info 21908 --- [ main] o.s.s.concurrent.threadpooltaskexecutor : initializing executorservice 'applicationtaskexecutor' 2019-02-22 20:29:36.423 info 21908 --- [ main] org.xnio : xnio version 3.3.8.final 2019-02-22 20:29:36.447 info 21908 --- [ main] org.xnio.nio : xnio nio implementation version 3.3.8.final 2019-02-22 20:29:36.614 info 21908 --- [ main] o.s.b.w.e.u.undertowservletwebserver : undertow started on port(s) 8080 (http) with context path '' 2019-02-22 20:29:36.621 info 21908 --- [ main] s.e.s.springbootundertowapplication : started springbootundertowapplication in 8.912 seconds (jvm running for 10.232) 2019-02-22 20:29:48.534 info 21908 --- [ xnio-1 task-1] io.undertow.servlet : initializing spring dispatcherservlet 'dispatcherservlet' 2019-02-22 20:29:48.534 info 21908 --- [ xnio-1 task-1] o.s.web.servlet.dispatcherservlet : initializing servlet 'dispatcherservlet' 2019-02-22 20:29:48.547 info 21908 --- [ xnio-1 task-1] o.s.web.servlet.dispatcherservlet : completed initialization in 12 ms
启动成功,当您看到 undertow started on port(s) 8080 (http) with context path ''
的行输出时,说明此时正在使用的是 undertow 容器,而非 tomcat !
三、undertow 相关配置
您可以针对 undertow 容器做一些特定配置,如日志输出路径,设置工作者线程的个数等参数优化等,如下所示:
# 是否打开 undertow 日志,默认为 false server.undertow.accesslog.enabled=false # 设置访问日志所在目录 server.undertow.accesslog.dir=logs # 指定工作者线程的 i/0 线程数,默认为 2 或者 cpu 的个数 server.undertow.io-threads= # 指定工作者线程个数,默认为 i/o 线程个数的 8 倍 server.undertow.worker-threads= # 设置 http post 内容的最大长度,默认不做限制 server.undertow.max-http-post-size=0
四、tomcat vs undertow 容器性能对比
在文章的开始,我们提到过 undertow 的性能要优于 tomcat, 但是口说无凭,需要拿出实际的证据,新建一个 web 项目,通过 jdk 自带的工具对比一下各项指标情况:
先看看 tomcat:
可以看到,tomcat 大约使用了 110m 的堆内存以及大约 16 个线程数!
再来看看轻量级 servlet 容器 undertow 的指标:
undertow 的内存使用情况大约为 90m, 线程数大约 13 个线程的样子。这还是在应用不复杂的情况下,大型应用出入会更大。
五、环境说明
上述 demo 是基于 spring boot 2.1.2.release,需要注意一下 !
六、github 源码
欢迎关注公众号: 小哈学java
推荐阅读
-
Linux系统配置(系统优化)
-
真我GTNEO3电竞版怎么样?真我GTNEO3电竞版参数配置介绍
-
非Oralce用户环境变量配置
-
如何批量处理图片大小?PS批量处理图片教程
-
PS制作证件照图文教程
-
phpmyadmin报错原因及解决办法:无法在发生异常时创建会话,请检查 PHP 或网站服务器日志,并正确配置 PHP 安装
-
PHP跨平台获取服务器IP地址自定义函数分享,phpip自定义函数_PHP教程
-
php获取Google机器人访问足迹的方法,google机器人_PHP教程
-
javascript基础【一】_PHP教程
-
ajax + php + Controller 控制所有后台函数调用,ajaxcontroller_PHP教程