热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

SpringBoot如何优化内嵌的Tomcat示例详解

springboot默认web程序启用tomcat内嵌容器,监听8080端口,下面这篇文章主要给大家介绍了关于SpringBoot如何优化内嵌Tomcat的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。

前言

本文主要给大家介绍了关于Spring Boot优化内嵌Tomcat的相关内容,分享出来供大家参考学习,下面话不多说了,来一看看详细的介绍吧。

Spring Boot测试版本

 
 org.springframework.boot 
 spring-boot-starter-parent 
 1.3.3.RELEASE 
 
 
  
  org.springframework.boot 
  spring-boot-starter-web 
  
 

SpringBoot默认使用的是Tomcat作为web server

springboot中默认可以通过配置如下参数设置内嵌容器Tomcat的端口,最大线程数等等

server.port=8081
server.tomcat.max-threads=1000

但是,无法设置最大连接数,而最大连接数直接影响到Tomcat的性能,如何调整这个最大连接数呢?

以下有三种方法

第一种:

package com.web.server; 
 
import org.apache.catalina.connector.Connector; 
import org.apache.coyote.http11.Http11NioProtocol; 
import org.springframework.boot.context.embedded.EmbeddedServletContainer; 
import org.springframework.boot.context.embedded.ServletContextInitializer; 
import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory; 
import org.springframework.stereotype.Component; 
 
@Component() 
public class MyEmbeddedServletContainerFactory extends TomcatEmbeddedServletContainerFactory 
{ 
 public EmbeddedServletContainer getEmbeddedServletContainer(ServletContextInitializer... initializers) 
 { 
  //设置端口 
  this.setPort(8081); 
  return super.getEmbeddedServletContainer(initializers); 
 } 
  
 protected void customizeConnector(Connector connector) 
 { 
  super.customizeConnector(connector); 
  Http11NioProtocol protocol = (Http11NioProtocol)connector.getProtocolHandler(); 
  //设置最大连接数 
  protocol.setMaxConnections(2000); 
  //设置最大线程数 
  protocol.setMaxThreads(2000); 
  protocol.setConnectionTimeout(30000); 
 } 
} 

第二种:

package com.web.server; 
 
import org.apache.catalina.connector.Connector; 
import org.apache.coyote.http11.Http11NioProtocol; 
import org.springframework.boot.context.embedded.EmbeddedServletContainerFactory; 
import org.springframework.boot.context.embedded.tomcat.TomcatConnectorCustomizer; 
import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory; 
import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.Configuration; 
 
@Configuration 
public class WebServerConfiguration 
{ 
 @Bean 
 public EmbeddedServletContainerFactory createEmbeddedServletContainerFactory() 
 { 
  TomcatEmbeddedServletContainerFactory tomcatFactory = new TomcatEmbeddedServletContainerFactory(); 
  tomcatFactory.setPort(8081); 
  tomcatFactory.addConnectorCustomizers(new MyTomcatConnectorCustomizer()); 
  return tomcatFactory; 
 } 
} 
class MyTomcatConnectorCustomizer implements TomcatConnectorCustomizer 
{ 
 public void customize(Connector connector) 
 { 
  Http11NioProtocol protocol = (Http11NioProtocol) connector.getProtocolHandler(); 
  //设置最大连接数 
  protocol.setMaxConnections(2000); 
  //设置最大线程数 
  protocol.setMaxThreads(2000); 
  protocol.setConnectionTimeout(30000); 
 } 
} 

第三种:

package com.web.server; 
 
import org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainer; 
import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer; 
import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory; 
import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.Configuration; 
 
@Configuration 
public class WebServerConfiguration 
{ 
 @Bean 
 public EmbeddedServletContainerCustomizer createEmbeddedServletContainerCustomizer() 
 { 
  return new MyEmbeddedServletContainerCustomizer(); 
 } 
} 
 
class MyEmbeddedServletContainerCustomizer implements EmbeddedServletContainerCustomizer 
{ 
 public void customize(ConfigurableEmbeddedServletContainer container) 
 { 
  TomcatEmbeddedServletContainerFactory tomcatFactory = (TomcatEmbeddedServletContainerFactory)container; 
  tomcatFactory.setPort(8081); 
  //下面的操作可以参照上面的方法 
 } 
} 

最后,如果发现没有生效,就把application.properties配置里面关于Tomcat的一些配置(server.*)全部删掉,就OK了。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。


推荐阅读
  • 标题: ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • Tomcat/Jetty为何选择扩展线程池而不是使用JDK原生线程池?
    本文探讨了Tomcat和Jetty选择扩展线程池而不是使用JDK原生线程池的原因。通过比较IO密集型任务和CPU密集型任务的特点,解释了为何Tomcat和Jetty需要扩展线程池来提高并发度和任务处理速度。同时,介绍了JDK原生线程池的工作流程。 ... [详细]
  • 本文介绍了关于apache、phpmyadmin、mysql、php、emacs、path等知识点,以及如何搭建php环境。文章提供了详细的安装步骤和所需软件列表,希望能帮助读者解决与LAMP相关的技术问题。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • Android系统移植与调试之如何修改Android设备状态条上音量加减键在横竖屏切换的时候的显示于隐藏
    本文介绍了如何修改Android设备状态条上音量加减键在横竖屏切换时的显示与隐藏。通过修改系统文件system_bar.xml实现了该功能,并分享了解决思路和经验。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • 本文介绍了一些Java开发项目管理工具及其配置教程,包括团队协同工具worktil,版本管理工具GitLab,自动化构建工具Jenkins,项目管理工具Maven和Maven私服Nexus,以及Mybatis的安装和代码自动生成工具。提供了相关链接供读者参考。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了StartingzookeeperFAILEDTOSTART相关的知识,希望对你有一定的参考价值。下载路径:https://ar ... [详细]
  • 本文介绍了在Linux下安装和配置Kafka的方法,包括安装JDK、下载和解压Kafka、配置Kafka的参数,以及配置Kafka的日志目录、服务器IP和日志存放路径等。同时还提供了单机配置部署的方法和zookeeper地址和端口的配置。通过实操成功的案例,帮助读者快速完成Kafka的安装和配置。 ... [详细]
  • mac php错误日志配置方法及错误级别修改
    本文介绍了在mac环境下配置php错误日志的方法,包括修改php.ini文件和httpd.conf文件的操作步骤。同时还介绍了如何修改错误级别,以及相应的错误级别参考链接。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 如何提高PHP编程技能及推荐高级教程
    本文介绍了如何提高PHP编程技能的方法,推荐了一些高级教程。学习任何一种编程语言都需要长期的坚持和不懈的努力,本文提醒读者要有足够的耐心和时间投入。通过实践操作学习,可以更好地理解和掌握PHP语言的特异性,特别是单引号和双引号的用法。同时,本文也指出了只走马观花看整体而不深入学习的学习方式无法真正掌握这门语言,建议读者要从整体来考虑局部,培养大局观。最后,本文提醒读者完成一个像模像样的网站需要付出更多的努力和实践。 ... [详细]
  • 本文介绍了H5游戏性能优化和调试技巧,包括从问题表象出发进行优化、排除外部问题导致的卡顿、帧率设定、减少drawcall的方法、UI优化和图集渲染等八个理念。对于游戏程序员来说,解决游戏性能问题是一个关键的任务,本文提供了一些有用的参考价值。摘要长度为183字。 ... [详细]
  • 本文介绍了Python函数的定义与调用的方法,以及函数的作用,包括增强代码的可读性和重用性。文章详细解释了函数的定义与调用的语法和规则,以及函数的参数和返回值的用法。同时,还介绍了函数返回值的多种情况和多个值的返回方式。通过学习本文,读者可以更好地理解和使用Python函数,提高代码的可读性和重用性。 ... [详细]
author-avatar
祖v哥
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有