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

作者:西夏一品堂 时间:2023-11-13 17:52:53 

前言

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

Spring Boot测试版本


<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.3.RELEASE</version>
</parent>
<dependencies>
<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>

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了。

来源:http://blog.csdn.net/mn960mn/article/details/51306140

标签:springboot,内嵌tomcat,优化
0
投稿

猜你喜欢

  • Android基于OpenGL在GLSurfaceView上绘制三角形及使用投影和相机视图方法示例

    2023-06-08 03:59:42
  • 全网最详细Hutool工具详解

    2023-05-04 06:21:53
  • C#使用DoddleReport快速生成报表

    2022-05-31 06:39:59
  • Spring Boot整合Web项目常用功能详解

    2023-06-04 17:14:21
  • Android中用onSaveInstanceState保存Fragment状态的方法

    2022-05-16 00:39:44
  • Mybatis判断空字符串的问题

    2022-11-18 02:07:00
  • 基于ArrayList源码解析(基于JDK1.8)

    2021-10-07 18:34:25
  • Spring事务失效的场景梳理总结

    2023-02-23 16:23:24
  • Java定时器Timer简述

    2023-07-20 19:17:16
  • Android项目实现视频播放器

    2022-10-05 07:53:35
  • 浅述int与string类型转换的两种方法

    2023-09-09 08:56:28
  • java并发编程包JUC线程同步CyclicBarrier语法示例

    2023-01-18 07:44:58
  • 浅谈Java中方法参数传递的问题

    2021-11-06 04:24:46
  • C#中在WebClient中使用post发送数据实现方法

    2023-05-01 00:03:54
  • 一篇文章带你入门Java之编程规范

    2022-02-25 16:18:40
  • Struts2+Hibernate实现数据分页的方法

    2022-10-28 05:31:13
  • java理论基础Stream元素的匹配与查找

    2021-08-26 10:11:20
  • 分析那些不讲武德的SDK(构造使用规范)

    2023-05-21 00:36:22
  • Java反射机制的学习总结

    2022-08-30 07:20:39
  • Spring探秘之如何妙用BeanPostProcessor

    2021-07-01 22:41:46
  • asp之家 软件编程 m.aspxhome.com