SpringBoot2使⽤Jetty容器操作(替换默认Tomcat)
Jetty和tomcat的⽐较
Tomcat和Jetty都是⼀种Servlet引擎,他们都⽀持标准的servlet规范和JavaEE的规范。
架构⽐较
Jetty的架构⽐Tomcat的更为简单
Jetty的架构是基于Handler来实现的,主要的扩展功能都可以⽤Handler来实现,扩展简单。
Tomcat的架构是基于容器设计的,进⾏扩展是需要了解Tomcat的整体设计结构,不易扩展。
性能⽐较
Jetty和Tomcat性能⽅⾯差异不⼤
Jetty可以同时处理⼤量连接⽽且可以长时间保持连接,适合于web聊天应⽤等等。
Jetty的架构简单,因此作为服务器,Jetty可以按需加载组件,减少不需要的组件,减少了服务器内存开销,
从⽽提⾼服务器性能。Jetty默认采⽤NIO(⾮阻塞IO)结束在处理I/O请求上更占优势,在处理静态资源时,性能较⾼。
Tomcat适合处理少数⾮常繁忙的链接,也就是说链接⽣命周期短的话,Tomcat的总体性能更⾼。另外,Tomcat默认采⽤BIO(阻塞IO)处理I/O请求,在处理静态资源时,性能较差。
Servlet规范⽀持⽅⾯
Jetty的应⽤更加快速,修改简单,对新的Servlet规范的⽀持较好。 GAE(⾕歌应⽤引擎已经全⾯切换为Jetty)
Tomcat⽬前应⽤⽐较⼴泛,对JavaEE和Servlet的⽀持更加全⾯,很多特性会直接集成进来。(中⼩企业还再在⽤)
maven配置
maven的l只需要排除tomcat并引⼊jetty即可
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!-- 使⽤Jetty,需要在spring-boot-starter-web排除spring-boot-starter-tomcat,因为SpringBoot默认使⽤tomcat -->
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- Jetty适合长连接应⽤,就是聊天类的长连接 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
配置⽅⾯,保持之前的内容即可。
server.port和t-path的配置不变,
server:
spring framework组件port: 1314
servlet:
context-path: /xxxx
#jetty配置,主要是acceptors和selectors
jetty:
acceptors: 2
selectors: 4
#tomcat的配置可以保留,切换回来可⽤,反正不会⽣效
tomcat:
remote-ip-header: x-forward-for
uri-encoding: UTF-8
max-threads: 2000
#background-processor-delay: 30
max-http-header-size: 8096
basedir: ${user.home}/tomcat/tmp
max-connections: 5000
max-http-post-size: 10000000
connection-timeout: 600000
application.properties配置
如果properties可以配置如下
####Jetty properties>###
server.jetty.acceptors=2 # acceptor线程数
server.jetty.max-http-post-size=0 # put或post⽅法最⼤字节数
server.jetty.selectors=4 # selector线程数
Jetty参数解读
Jetty的线程架构模型⾮常简单,分为acceptors,selectors和workers三个线程池。acceptors负责接受新
连接,然后交给selectors处理HTTP消息协议的解包,最后由workers处理请求。前两个线程池采⽤⾮阻塞模型,⼀个线程可以处理很多socket的读写,所以线程池数量较⼩。
⼤多数项⽬,acceptors线程只需要1-2个,selectors线程配置2~4个⾜矣。workers是阻塞性的业务逻辑,往往有较多的数据库操作,需要的线程数量较多,具体数量随应⽤程序的QPS和IO事件占⽐⽽定。QPS越⾼,需要的线程数量越多,IO占⽐越⾼,等待的线程数越多,需要的总线程数也越多。
补充知识:SpringBoot 2.1.x整合Jetty容器l依赖
<dependencies>
<!--WEB 模块-->
<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>
<!--Jetty容器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
</dependencies>
Jetty容器相关参数
测试
多多⽀持。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论