您的位置:首页 > 娱乐 > 八卦 > 天元建设集团名声_软考5个高级中哪个好考_电商网站有哪些_公司网站制作流程

天元建设集团名声_软考5个高级中哪个好考_电商网站有哪些_公司网站制作流程

2024/12/29 4:14:37 来源:https://blog.csdn.net/qq_41378597/article/details/144357053  浏览:    关键词:天元建设集团名声_软考5个高级中哪个好考_电商网站有哪些_公司网站制作流程
天元建设集团名声_软考5个高级中哪个好考_电商网站有哪些_公司网站制作流程

文章目录

  • 一、Tomcat设计思路总结
    • 1、Tomcat整体架构
    • 2、Tomcat设计思路
  • 二、Tomcat源码设计精髓
  • 三、拓展:SpringBoot整合Tomcat源码分析
  • 四、拓展:SpringBoot整合Undertow实战
    • 1、Undertow概述
    • 2、SpringBoot集成Undertow
      • 2.1、引入依赖
      • 2.2、application.properties配置

一、Tomcat设计思路总结

1、Tomcat整体架构

在这里插入图片描述

2、Tomcat设计思路

在这里插入图片描述

二、Tomcat源码设计精髓

思考:Tomcat使用了哪些设计模式?

思考:Tomcat线程池和传统JDK线程池有什么区别? (自定义线程池的需求可以参考tomcat的线程池)

Tomcat线程池默认实现StandardThreadExecutor。Tomcat 线程池和 Java 原生线程池的区别:

  • 自定义了拒绝策略,Tomcat 在线程总数达到最大数时,不是立即执行拒绝策略,而是再尝试向任务队列添加任务,添加失败后再执行拒绝策略。

  • TaskQueue 重写了 LinkedBlockingQueue 的 offer 方法。只有当前线程数大于核心线程数、小于最大线程数,并且已提交的任务个数大于当前线程数时,也就是说线程不够用了,但是线程数又没达到极限,才会去创建新的线程。目的:在任务队列的长度无限制的情况下,让线程池有机会创建新的线程。

三、拓展:SpringBoot整合Tomcat源码分析

在这里插入图片描述

四、拓展:SpringBoot整合Undertow实战

1、Undertow概述

Undertow作为SpringBoot默认集成的三大容器之一(Tomcat、Jetty、Undertow);首先它是Red Hat公司旗下的开源产品, 由Java语言开发,是一款灵活的高性能Web服务器;不仅支持阻塞IO还支持非阻塞IO。由于Undertow通过java语言开发,即在java项目中使用可直接嵌入。Undertow在性能使用方面优于Jetty、Tomcat。

官网: https://undertow.io/

特性:

  • 红帽开源产品,目前是 WildFly(JBoss AS)的默认 Web 容器。

  • 在不需要非常复杂的配置情况下,可以展现出很高的性能以及稳定性。

  • 非常轻量,只需通过 API 即可快速搭建 Web 服务器。

  • 底层基于 XNIO,和 Netty 设计类似,使用 NIO 作为网络交互的方式,并且使用直接内存作为网络传输的 buffer,减少业务的 GC。

  • 由于基于这种异步框架,所以配置也是交由链式Handler配置和处理请求,可以最小化按需加载模块,无须加载多余功能

  • 支持 Servlet 4.0 以及向下兼容,支持 WebSocket

2、SpringBoot集成Undertow

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

2.1、引入依赖

<!--添加web依赖-->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><!--移除Tomcat依赖--><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>

2.2、application.properties配置

# Undertow 日志存放目录
server.undertow.accesslog.dir=
# 是否启动日志
server.undertow.accesslog.enabled=true 
# 日志格式
server.undertow.accesslog.pattern=common
# 日志文件名前缀
server.undertow.accesslog.prefix=access_log
# 日志文件名后缀
server.undertow.accesslog.suffix=log
# HTTP POST请求最大的大小
server.undertow.max-http-post-size=0 
# 设置IO线程数, 它主要执行非阻塞的任务,它们会负责多个连接, 默认设置每个CPU核心一个线程
server.undertow.io-threads=4
# 阻塞任务线程池, 当执行类似servlet请求阻塞操作, undertow会从这个线程池中取得线程,它的值设置取决于系统的负载
server.undertow.worker-threads=20
# 以下的配置会影响buffer,这些buffer会用于服务器连接的IO操作,有点类似netty的池化内存管理
# 每块buffer的空间大小,越小的空间被利用越充分
server.undertow.buffer-size=1024
# 是否分配的直接内存
server.undertow.direct-buffers=true

当你看到 Undertow started on port 8080 (http) 的行输出时,说明此时正在使用的是 Undertow 容器,而非 Tomcat容器。

在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com