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

时间:2022-09-22 22:20:06

前言

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

Spring Boot测试版本

?
1
2
3
4
5
6
7
8
9
10
11
<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的端口,最大线程数等等

?
1
2
server.port=8081
server.tomcat.max-threads=1000

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

以下有三种方法

第一种:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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);
 }
}

第二种:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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);
 }
}

第三种:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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