”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 提高 Spring Boot 应用程序的性能 - 第一部分

提高 Spring Boot 应用程序的性能 - 第一部分

发布于2024-11-08
浏览:739

Melhorando o desempenho de aplicações Spring Boot - Parte I

启动Spring Boot应用程序时,我们通常使用启动器提供的默认设置,这对于大多数情况来说已经足够了。但是,如果我们需要性能,则可以进行具体调整,如本文第一部分所示。

Tomcat 替换为另一个 servlet 容器

应用程序webRESTFul,使用Spring MVC,一般添加spring-boot-starter-web依赖,默认使用Tomcat作为服务器网络。然而,还有更有趣的替代方案,例如Undertow,这是一个高性能的web服务器,具有异步和非阻塞架构,这使得它能够处理大量数据高效的同时连接,使其适合高性能应用。我们并不是说 Tomcat 不好,但我们可以给 Undertow.

一个机会。

Undertow 添加到 Spring

为了让我们使用Undertow作为web服务器,我们需要忽略 spring-boot-starter-web 已经添加的 spring-boot-starter-tomcat 依赖然后添加 spring-boot-starter-undertow.

使用pom.xml:


    
        org.springframework.boot
        spring-boot-starter-web
        
            
                org.springframework.boot
                spring-boot-starter-tomcat
            
        
    

    
        org.springframework.boot
        spring-boot-starter-undertow
    

使用build.gradle:

dependencies {
    implementation('org.springframework.boot:spring-boot-starter-web') {
        exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat'
    }
    implementation 'org.springframework.boot:spring-boot-starter-undertow'
}

配置潜流

通过application.properties或application.yml,我们可以配置我们希望服务器使用多少个IO线程和多少个工作线程

使用application.yml

server:
  undertow:
    threads:
      io: 4
      worker: 64

使用 application.properties

server.undertow.threads.io=4
server.undertow.threads.worker=64

I/O 线程执行非阻塞操作,并且永远不应该执行阻塞操作,因为它们负责侦听到达应用程序的连接,然后将它们发送到处理队列。常见值为每个 CPU 核心两个 I/O 线程

工作线程执行阻塞操作,例如由I/O Threads发送到处理队列的Servlet请求。理想值取决于工作负载,但通常建议每个 CPU 核心配置 10 个左右的线程。

有关更详细的信息和更多可以探索的选项,只需转到 Undertow 文档。

压缩 HTTP 响应

数据压缩是一项旨在减少 HTTP 响应正文大小的功能,从而可以通过减少通过网络传输的数据量来提高应用程序的性能。

在 Spring Boot 中配置数据压缩是一项简单的任务,因为它支持此功能。

使用application.yml

server:
  compression:
    enabled: true
    mime-types: text/html,text/xml,text/plain,text/css,text/javascript,application/javascript,application/json
    min-response-size: 1024

使用 application.properties

server.compression.enabled=true
server.compression.mime-types=text/html,text/xml,text/plain,text/css,text/javascript,application/javascript,application/json
server.compression.min-response-size=1024

server.compression.enabled:启用/禁用压缩。
server.compression.mime-types:应压缩的 MIME 类型列表。
server.compression.min-response-size:执行压缩所需的“Content-Length”的最小大小。

至此,我们结束了本文的第一部分。在下一部分中,我们将详细了解 Hikari、JPA 和 Hibernate,并学习如何配置它们,以进一步提高 Spring Boot 应用程序的性能。

版本声明 本文转载于:https://dev.to/mathstylish/melhorando-a-performance-de-aplicacoes-spring-boot-parte-i-58jl?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 查找当前执行JavaScript的脚本元素方法
    查找当前执行JavaScript的脚本元素方法
    如何引用当前执行脚本的脚本元素在某些方案中理解问题在某些方案中,开发人员可能需要将其他脚本动态加载其他脚本。但是,如果Head Element尚未完全渲染,则使用document.getElementsbytagname('head')[0] .appendChild(v)的常规方...
    编程 发布于2025-04-30
  • 如何在JavaScript对象中动态设置键?
    如何在JavaScript对象中动态设置键?
    在尝试为JavaScript对象创建动态键时,如何使用此Syntax jsObj['key' i] = 'example' 1;不工作。正确的方法采用方括号: jsobj ['key''i] ='example'1; 在JavaScript中,数组是一...
    编程 发布于2025-04-30
  • 如何从PHP中的数组中提取随机元素?
    如何从PHP中的数组中提取随机元素?
    从阵列中的随机选择,可以轻松从数组中获取随机项目。考虑以下数组:; 从此数组中检索一个随机项目,利用array_rand( array_rand()函数从数组返回一个随机键。通过将$项目数组索引使用此键,我们可以从数组中访问一个随机元素。这种方法为选择随机项目提供了一种直接且可靠的方法。
    编程 发布于2025-04-30
  • 如何使用Python有效地以相反顺序读取大型文件?
    如何使用Python有效地以相反顺序读取大型文件?
    在python 中,如果您使用一个大文件,并且需要从最后一行读取其内容,则在第一行到第一行,Python的内置功能可能不合适。这是解决此任务的有效解决方案:反向行读取器生成器 == ord('\ n'): 缓冲区=缓冲区[:-1] ...
    编程 发布于2025-04-30
  • Java的Map.Entry和SimpleEntry如何简化键值对管理?
    Java的Map.Entry和SimpleEntry如何简化键值对管理?
    A Comprehensive Collection for Value Pairs: Introducing Java's Map.Entry and SimpleEntryIn Java, when defining a collection where each element com...
    编程 发布于2025-04-30
  • 为什么不````''{margin:0; }`始终删除CSS中的最高边距?
    为什么不````''{margin:0; }`始终删除CSS中的最高边距?
    在CSS 问题:不正确的代码: 全球范围将所有余量重置为零,如提供的代码所建议的,可能会导致意外的副作用。解决特定的保证金问题是更建议的。 For instance, in the example provided, adding the following code to the CSS wo...
    编程 发布于2025-04-30
  • 哪种方法更有效地用于点 - 填点检测:射线跟踪或matplotlib \的路径contains_points?
    哪种方法更有效地用于点 - 填点检测:射线跟踪或matplotlib \的路径contains_points?
    在Python Matplotlib's path.contains_points FunctionMatplotlib's path.contains_points function employs a path object to represent the polygon.它...
    编程 发布于2025-04-30
  • 如何使用Regex在PHP中有效地提取括号内的文本
    如何使用Regex在PHP中有效地提取括号内的文本
    php:在括号内提取文本在处理括号内的文本时,找到最有效的解决方案是必不可少的。一种方法是利用PHP的字符串操作函数,如下所示: 作为替代 $ text ='忽略除此之外的一切(text)'; preg_match('#((。 &&& [Regex使用模式来搜索特...
    编程 发布于2025-04-30
  • 如何使用PHP从XML文件中有效地检索属性值?
    如何使用PHP从XML文件中有效地检索属性值?
    从php $xml = simplexml_load_file($file); foreach ($xml->Var[0]->attributes() as $attributeName => $attributeValue) { echo $attributeName,...
    编程 发布于2025-04-30
  • 如何使用Python理解有效地创建字典?
    如何使用Python理解有效地创建字典?
    在python中,词典综合提供了一种生成新词典的简洁方法。尽管它们与列表综合相似,但存在一些显着差异。与问题所暗示的不同,您无法为钥匙创建字典理解。您必须明确指定键和值。 For example:d = {n: n**2 for n in range(5)}This creates a dicti...
    编程 发布于2025-04-30
  • 将图片浮动到底部右侧并环绕文字的技巧
    将图片浮动到底部右侧并环绕文字的技巧
    在Web设计中围绕在Web设计中,有时可以将图像浮动到页面右下角,从而使文本围绕它缠绕。这可以在有效地展示图像的同时创建一个吸引人的视觉效果。 css位置在右下角,使用css float and clear properties: img { 浮点:对; ...
    编程 发布于2025-04-30
  • Python中嵌套函数与闭包的区别是什么
    Python中嵌套函数与闭包的区别是什么
    嵌套函数与python 在python中的嵌套函数不被考虑闭合,因为它们不符合以下要求:不访问局部范围scliables to incling scliables在封装范围外执行范围的局部范围。 make_printer(msg): DEF打印机(): 打印(味精) ...
    编程 发布于2025-04-30
  • 找到最大计数时,如何解决mySQL中的“组函数\”错误的“无效使用”?
    找到最大计数时,如何解决mySQL中的“组函数\”错误的“无效使用”?
    如何在mySQL中使用mySql 检索最大计数,您可能会遇到一个问题,您可能会在尝试使用以下命令:理解错误正确找到由名称列分组的值的最大计数,请使用以下修改后的查询: 计数(*)为c 来自EMP1 按名称组 c desc订购 限制1 查询说明 select语句提取名称列和每个名称...
    编程 发布于2025-04-30
  • 在PHP中如何访问MySQL响应值
    在PHP中如何访问MySQL响应值
    在PHP中访问PHP中的mySQL响应值,在PHP中,在查询mySQL数据库时,结果存储在资源句柄中。在尝试打印或使用响应数据时,这可能会导致混乱。问题:此代码返回“资源ID#6”,而不是预期值。访问实际响应数据,您需要使用fetch函数。这是一个更新的示例:)); 如果($ result){ ...
    编程 发布于2025-04-30
  • 如何配置Pytesseract以使用数字输出的单位数字识别?
    如何配置Pytesseract以使用数字输出的单位数字识别?
    Pytesseract OCR具有单位数字识别和仅数字约束 在pytesseract的上下文中,在配置tesseract以识别单位数字和限制单个数字和限制输出对数字可能会提出质疑。 To address this issue, we delve into the specifics of Te...
    编程 发布于2025-04-30

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3