Springboot - 3.容器集成

Web容器

  • 当选择Web容器时,你可以在Spring Boot应用中集成不同的容器。下面是Undertow、Tomcat、Jetty、Netty、WebLogic、WebSphere和WildFly这些常见Web容器的比较,包括它们的特点和优缺点:
容器特点优点缺点
Undertow轻量级、嵌入式支持、异步处理能力强低资源占用、高性能、适用于高并发场景Java EE规范支持相对较弱
Tomcat流行、成熟、支持Java EE规范易于使用、大型社区、适用于中小型项目相对较重、性能可能不如某些轻量级容器
Jetty轻量级、高性能、嵌入式支持、异步处理能力强快速启动、适用于中小型项目、异步处理能力强Java EE规范支持相对较弱
Netty异步事件驱动、高度可定制、适用于高并发场景异步处理能力强、可扩展性好相对复杂、需要深入了解网络编程知识
WebLogic适用于大型企业应用、支持Java EE规范强大的Java EE支持、适用于大型企业应用商业产品、较重、配置复杂
WebSphere适用于大型企业应用、支持Java EE规范、商业产品强大的Java EE支持、适用于大型企业应用商业产品、较重、配置复杂
WildFly开源Java EE容器、支持Java EE规范、高度可定制强大的Java EE支持、适用于中小型和大型项目启动时间可能较长、较大的内存占用

主要说一下Undertow和Tomcat容器

特点 / 方面UndertowTomcat
类型高性能、嵌入式成熟的Java Web服务器
处理能力高并发、低延迟适应一般Web应用需求
资源消耗轻量级、较少内存和资源相对较重、较多内存和资源
生态系统相对较小、插件有限大型生态系统、丰富的插件和库
社区支持逐渐增加的社区支持强大的社区支持
配置复杂度简单相对较复杂
部署快速性适合快速部署和开发适合成熟项目的部署
嵌入式支持可以嵌入到Java应用中不常用作嵌入式应用

使用Undertow

  • 在Spring Boot项目中使用Undertow作为Web容器非常简单,只需要在pom.xml文件中添加相应的依赖并进行一些配置即可。下面是使用Undertow作为Web容器的步骤以及需要注意的事项:

添加Undertow依赖

  • 打开你的项目的pom.xml文件,添加Undertow依赖。
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><!-- Exclude the default embedded container --><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>

配置Undertow

  1. 配置Undertow: 默认情况下,Spring Boot会使用Undertow作为Web容器,所以你无需额外配置。但如果你想进行一些自定义配置,可以在application.propertiesapplication.yml文件中添加相关配置项,例如:

  2. 修改默认端口:
    默认情况下,Undertow使用8080端口。你可以通过在application.propertiesapplication.yml中添加以下配置来修改监听的端口:

    server.port=8081
    
  3. 设置上下文路径:
    如果你想在应用中使用特定的上下文路径,可以通过以下配置进行设置:

    server.servlet.context-path=/myapp
    
  4. 启用HTTPS:
    为了启用HTTPS,你需要提供SSL证书和密钥。首先,将证书和密钥放在项目中,然后在application.propertiesapplication.yml中进行配置:

    server.port=8443
    server.ssl.key-store=classpath:keystore.jks
    server.ssl.key-store-password=your-password
    server.ssl.key-password=your-password
    
  5. 配置线程池:
    Undertow使用一个XNIO线程池来处理请求。你可以通过以下配置项进行自定义设置:

    server.undertow.worker-threads=200
    server.undertow.io-threads=100
    
  6. 启用访问日志:
    Undertow可以记录访问日志,你可以通过以下配置启用它:

    server.undertow.accesslog.enabled=true
    server.undertow.accesslog.pattern=%t %a "%r" %s (%D ms)
    server.undertow.accesslog.prefix=access-log-
    server.undertow.accesslog.suffix=.log
    
  7. 配置连接超时:
    你可以配置连接超时、请求超时等,例如:

    server.undertow.connection-idle-timeout=30000
    server.undertow.max-http-post-size=10485760
    
  8. 自定义Undertow监听器:
    如果你需要更精细的控制,可以创建一个Undertow的UndertowBuilderCustomizer Bean,并进行自定义配置。

    @Bean
    public UndertowServletWebServerFactory undertowServletWebServerFactory() {UndertowServletWebServerFactory factory = new UndertowServletWebServerFactory();factory.addBuilderCustomizers(builder -> {// Customize Undertow builder herebuilder.setServerOption(UndertowOptions.IDLE_TIMEOUT, 60000);});return factory;
    }
    

注意事项

  • Undertow具有较低的资源占用和高性能,适用于高并发场景。
  • Undertow支持异步处理能力,可以在高负载下提供更好的性能。
  • 默认情况下,Undertow会监听8080端口,你可以通过配置server.port来改变监听的端口。
  • 注意Undertow的特性和限制,确保你的应用与其兼容。
  • 可以根据需要配置Undertow的其他属性,如线程池大小、连接超时等。

以上就是在Spring Boot项目中使用Undertow作为Web容器的基本步骤和注意事项。根据项目需求,你可以根据需要进行进一步的配置和调优。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/60924.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

详解html中的doctype

选择什么样的DOCTYPE XHTML 1.0中有3种DTD&#xff08;文档类型定义&#xff09;声明可以选择&#xff1a;过渡的&#xff08;Transitional&#xff09;、严格的&#xff08;Strict&#xff09;和框架的&#xff08;Frameset&#xff09;。这里分别介绍如下。 1&#xff0e…

如何增长LLM推理token,从直觉到数学

背景&#xff1a; 最近大模型输入上文长度增长技术点的研究很火。为何要增长token长度,为何大家如此热衷于增长输入token的长度呢&#xff1f;其实你如果是大模型比价频繁的使用者&#xff0c;这个问题应该不难回答。增长了输入token的长度&#xff0c;那需要多次出入才能得到…

软考:中级软件设计师:信息系统的安全属性,对称加密和非对称加密,信息摘要,数字签名技术,数字信封与PGP

软考&#xff1a;中级软件设计师:信息系统的安全属性 提示&#xff1a;系列被面试官问的问题&#xff0c;我自己当时不会&#xff0c;所以下来自己复盘一下&#xff0c;认真学习和总结&#xff0c;以应对未来更多的可能性 关于互联网大厂的笔试面试&#xff0c;都是需要细心准…

关于JVM的参数类型

JVM参数类型&#xff0c;主要是可以分为三类。分别是&#xff1a; 标准参数 例如&#xff1a; -help-server-client-version-showversion-cp-classpath 等等&#xff0c;这类参数的特点是在jdk各版本里基本不会变的&#xff0c;相对稳定。 X参数 X参数也就是非标准化参数&am…

W5500-EVB-PICO通过SNTP获取网络时间(十一)

前言 上一章我们用W5500_EVB_PICO 开发板做Ping数据测试IP检测连通性&#xff0c;那么本章我们进行W5500_EVB_PICO SNTP的测试。 什么是NTP&#xff1f; NTP(Network Time Protocol&#xff09;网络时间协议基于UDP&#xff0c;用于网络时间同步的协议&#xff0c;使网络中的计…

floyed-多源汇聚最短路

时间复杂度O(n^3)动态规划d[k][i][j] min(d[k-1][i][j],d[k-1][i][k] d[k-1][k][j])可以简化为d[i][j] min(d[i][j], d[i][k] d[j][k]) //考虑经过k点时的最短路 代码 #include<iostream> #include<algorithm> #include<cstdio>using namespace std;co…

element-plus指定el-date-picker的弹出框位置

此处记录一下,通过popper-options指定popper出现的位置

探索生成人工智能的前景

什么是生成式人工智能&#xff1f; 生成式人工智能是一类旨在创建新颖内容的人工智能 (AI) 技术和模型。与简单的复制不同&#xff0c;这些模型通过利用从训练数据集中收集的模式和见解从头开始生成数据&#xff0c;例如文本、图像、音乐等。 生成式人工智能如何运作&#xf…

2、QT的信号与槽

一、什么是信号与槽 一个对象发送一个信号出去&#xff0c;另外一个对象接收到该信号后&#xff0c;会触发相应的槽函数 二、信号与槽的语法 connect(信号的发送者&#xff0c;SIGNAL(信号名称),信号的接收者,SLOT(槽函数)); 1、写法&#xff1a; QT 4 的写法 connect(sende…

生物实验室污水处理设备工艺流程

生物实验室污水处理设备工艺流程 工艺流程 1.初级处理&#xff1a; 初级处理是污水处理的第一步&#xff0c;它主要用于去除废水中的固体颗粒和悬浮物。在实验室中&#xff0c;这些固体可能是化学物质残留、实验样品等。初级处理通常包括格栅、沉砂池或沉淀槽等设备&#xff0c…

anaconda环境迁移

conda环境迁移第一步 进入anaconda安装文件夹&#xff0c;然后进入envs文件夹&#xff0c;下面的每一个文件夹都是你创建的环境&#xff0c; 准备一个u盘之类的&#xff0c;把整个文件夹复制下来&#xff0c;然后打开另外一台机器&#xff0c;把同样的文件夹复制到同样的文件夹…

探究分布式操作系统的本质

探究分布式操作系统的本质 有一位网友问&#xff0c;分布式操作系统的本质是什么&#xff0c;今天就来说说这个话题。 首先&#xff0c;我们需要明确什么是分布式操作系统。 从大范围来理解&#xff0c;分布式操作系统是传统单机操作系统的延伸&#xff0c;可以看作是在多台独…

Maven的profiles多环境配置

一个项目通常都会有多个不同的运行环境&#xff0c;例如开发环境&#xff0c;测试环境、生产环境等。而不同环境的构建过程很可能是不同的&#xff0c;例如数据源配置、插件、以及依赖的版本等。每次将项目部署到不同的环境时&#xff0c;都需要修改相应的配置&#xff0c;这样…

0830hw

1.2.链式队列 head.h #include <myhead.h> typedef int datatype; typedef struct seq {union{datatype data;int len;};struct seq *next; }seq,*S; typedef struct PP {S front;S rear; }P; P *create(); void input_tail(P *p,datatype n); void pop_head(P *p); vo…

postgresql-日期函数

postgresql-日期函数 日期时间函数计算时间间隔获取时间中的信息截断日期/时间创建日期/时间获取系统时间CURRENT_DATE当前事务开始时间 时区转换 日期时间函数 PostgreSQL 提供了以下日期和时间运算的算术运算符。 计算时间间隔 age(timestamp, timestamp)函数用于计算两…

恢复已删除的git分支

1.打开对应项目文件夹目录,在目录下执行git命令 2.执行命令 git reflog --dateiso , 找到最后一次commit 的id 3. 执行git checkout -b 新建分支名称 commitId 就会基于commitId这次提交时工作区新建一个分支&#xff0c;就能达到我们找到删除分支的代码效果。 4.直接看ide…

ABB PCD231B101励磁控制模块

电磁励磁控制&#xff1a; PCD231B101 模块专门设计用于电磁励磁设备的控制&#xff0c;以确保发电机的励磁电流和电压维持在合适的水平。 多通道控制&#xff1a; 这种模块通常具有多个控制通道&#xff0c;可用于同时监测和控制多台电力发电机。 通讯接口&#xff1a; PCD2…

二叉树的前序遍历

目录 题目题目要求示例 解答方法一、实现思路时间复杂度和空间复杂度代码 方法二、实现思路时间复杂度和空间复杂度代码 题目 二叉树的前序遍历 题目要求 题目链接 示例 解答 方法一、 递归法 实现思路 使用递归依次将该结点的数据&#xff0c;该结点的左子树的数据&am…

【Nginx】Linux keepalived+nginx实现主从模式

Linux keepalivednginx实现主从模式 简述&#xff1a; 双机高可用方法目前分为两种&#xff1a;   主从模式&#xff1a;一台主服务器和一台从服务器&#xff0c;当配置了虚拟vip的主服务器发送故障时&#xff0c;从服务器将自动接管虚拟ip&#xff0c;服务将不会中断。但主…

微服务nacos或者yml配置内容部分加密jasypt

写在最前&#xff1a;因业务需要把nacos配置中的部分密码加密&#xff0c;不能暴露在外&#xff0c;本想用nacos官方的插拔插件nacos-aes-encryption-plugin的&#xff0c;但是比较复杂且官方文档说的不清不楚所以弃用&#xff0c;有兴趣的可以参考。链接&#xff1a;https://n…