SpringBoot中使用undertow

4 篇文章 0 订阅
3 篇文章 0 订阅

首先说一下undertow是个啥?

undertow是一个采用Java开发的灵活的高性能web服务器。其提供包括阻塞和基于NIO的非阻塞机制。

它是红帽公司的开源产品,是一个完全为嵌入式设计的web服务器。

优点:

  • 轻量:undertow只有几百KB,在嵌入式模式下运行,占用的堆内存也只有4MB左右
  • servlet兼容:完美兼容servlet3.1
  • Web Socket:支持Web Socket
  • 长连接:默认情况下,undertow通过keep-alive的response header来支持长连接。它通过重用连接信息(connection details)来改善长连接的性能

上面有提到,undertow是一个完全为嵌入式设计的web服务器,而恰巧,SpringBoot的核心点之一就是嵌入式的web服务器。于是undertow快速的在SpringBoot项目中流行了起来。

SpringBoot默认是使用的Tomcat作为web服务器,其还支持undertow和jetty两种服务器。那么为什么undertow的使用率在逐渐升高呢。

作为web服务器,最让人关心的无外乎就是并发和资源消耗。而undertow、Tomcat、jetty的压测结果以及资源消耗都证明,undertow是较好的选择。当然,具体选择什么还是看实际业务和项目情况。

这里直接展示给大家,网上大佬测试的结果:

  • 压测结果:在面对并发的情况下,Tomcat和jetty差距不大,undertow略高一筹
  • 资源消耗:在容器启动时,jetty消耗最大,undertow比Tomcat略微低一点点

如果对压测和资源消耗的详细结果有兴趣的,可以参考如下文章SpringBoot服务器压测对比。当然,也可以自己去测试一下。

那么,如果我们选择了undertow,那要如何使用它呢。下面就详细的说明一下。

依赖

引入undertow的依赖,同时要排除掉默认的Tomcat依赖:

<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>
参数配置
# access log目录
server.undertow.accesslog.dir=
# 是否打开access log
server.undertow.accesslog.enabled=false
# access log的输出格式化模板
server.undertow.accesslog.pattern=common
# 日志文件名称前缀
server.undertow.accesslog.prefix=access_log.
# 是否开启access log rotation
server.undertow.accesslog.rotate=true
# 日志文件名称后缀
server.undertow.accesslog.suffix=log
# 每个buffer可以存储的字节数,buffer会用于服务器连接的IO操作,有点类似netty的池化内存管理,设置越小越好,根据实际业务尽量设置的小一点
server.undertow.buffer-size=1024
# 每个域的buffer数
server.undertow.buffers-per-region=
# 是否直接分配堆外内存
server.undertow.direct-buffers=true
# 置IO线程数, 它主要执行非阻塞的任务,它们会负责多个连接, 默认设置每个CPU核心一个线程,设置太大会使项目启动失败
server.undertow.io-threads=16
# http发送的请求内容的最大字节数
server.undertow.max-http-post-size=0
# 阻塞任务线程池, 当执行类似servlet请求阻塞IO操作, undertow会从这个线程池中取得线程,它的值设置取决于系统线程执行任务的阻塞系数,默认值是IO线程数*8
server.undertow.worker-threads=256
多端口监听

如果有需要多端口监听的时候,可以通过UndertowEmbeddedServletContainerFactory去定义:

@Bean
public UndertowEmbeddedServletContainerFactory embeddedServletContainerFactory() {
    UndertowEmbeddedServletContainerFactory factory = new UndertowEmbeddedServletContainerFactory();
    factory.addBuilderCustomizers(new UndertowBuilderCustomizer() {

        @Override
        public void customize(Builder builder) {
            builder.addHttpListener(8080, "0.0.0.0");
        }

    });
    return factory;
}

一般而言,引入依赖后,除日志相关的配置,其它都使用默认的即可。当项目需要对密集IO操作或者并发进行优化时,再去考虑通过配置去优化undertow,让其更适合自己的项目。

  • 2
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
文档内容 一、 Spring介绍 1 1.1、SpringBoot简介 1 1.2、系统要求: 1 1.3、SpringBoot和SpringMVC区别 1 1.4、SpringBoot和SpringCloud区别 2 1.5常见错误 2 二、快速入门 2 2.1、创建一个Maven工程 2 2.2、pom文件引入依赖 3 2.3、编写HelloWorld服务 3 2.4、@RestController 4 2.5、@EnableAutoConfiguration 4 2.6 SpringApplication.run(HelloController.class, args); 4 2.7、SpringBoot启动方式1 4 2.8、SpringBoot启动方式2 4 2.9、SpringBoot启动方式3 5 三、 Web开发 5 3.1、静态资源访问 5 3.2、渲染Web页面 5 3.3、使用Freemarker模板引擎渲染web视图 6 3.3.1、pom文件引入: 6 3.3.2、后台代码 6 3.3.3、前台代码 6 3.3.4、Freemarker其他用法 7 3.3.5、Freemarker配置 8 3.4、使用JSP渲染Web视图 8 3.4.1、pom文件引入以下依赖 8 3.4.2、在application.properties创建以下配置 9 3.4.3、后台代码 9 3.5、全局捕获异常 10 四、 数据访问 10 4.1、springboot整合使用JdbcTemplate 10 4.2、springboot整合使用mybatis 12 4.3、springboot整合使用springjpa 18 4.4、springboot整合多数据源 19 五、 事物管理 25 5.1.1SpringBoot整合事物管理 25 5.1.2SpringBoot分布式事物管理 25 六、 日志管理 30 6.1使用log4j记录日志 30 6.2使用AOP统一处理Web请求日志 32 6.3Spring Boot集成lombok让代码更简洁 33 七、 缓存支持 35 7.1注解配置与EhCache使用 35 7.2使用Redis集成缓存 37 八、 热部署 37 8.1 什么是热部署 37 8.2 项目演示案例 37 8.3 热部署原理 37 8.4 Devtools依赖 38 8.5 Devtools原理 38 九、 监控管理 38 Actuator监控应用 38 Maven依赖 38 YML配置 39 Actuator访问路径 40 Admin-UI分布式微服务监控心 40 Admin-UI-Server 40 Admin-UI-Client 41 十、 性能优化 43 组件自动扫描带来的问题 43 将Servlet容器变成Undertow 44 SpringBoot JVM参数调优 44 十一、 2.0版本新特性 45 以Java 8 为基准 45 内嵌容器包结构调整 45 Servlet-specific 的server properties调整 45 Actuator 默认映射 46 Spring Loaded不再支持 46 支持Quartz Scheduler 46 OAuth 2.0 支持 46 支持Spring WebFlux 46 版本要求 46 十二、 其他内容 47 12.1、使用@Scheduled创建定时任务 47 12.2、使用@Async实现异步调用 47 12.3、自定义参数 49 12.4、多环境配置 50 12.5、修改端口号 50 12.6、SpringBoot yml 使用 50 12.7、SpringBoot整合拦截器 51 12.8、发布打包 52

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值