SpringBoot优化内嵌的Tomcat

pom文件的依赖

 1 <parent>  
 2     <groupId>org.springframework.boot</groupId>  
 3     <artifactId>spring-boot-starter-parent</artifactId>  
 4     <version>1.3.3.RELEASE</version>  
 5 </parent>  
 6 <dependencies>  
 7     <dependency>  
 8         <groupId>org.springframework.boot</groupId>  
 9         <artifactId>spring-boot-starter-web</artifactId>  
10     </dependency>  
11 </dependencies>  

SpringBoot默认使用的是Tomcat作为web服务器

Springboot中可以通过配置文件配置如下参数设置内嵌容器Tomcat的端口,最大线程数等等
server.port=8081
server.tomcat.max-threads=1000

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

以下有三种方法:

  一:

 1 package com.web.server;  
 2   
 3 import org.apache.catalina.connector.Connector;  
 4 import org.apache.coyote.http11.Http11NioProtocol;  
 5 import org.springframework.boot.context.embedded.EmbeddedServletContainer;  
 6 import org.springframework.boot.context.embedded.ServletContextInitializer;  
 7 import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory;  
 8 import org.springframework.stereotype.Component;  
 9   
10 @Component()  
11 public class MyEmbeddedServletContainerFactory extends TomcatEmbeddedServletContainerFactory  
12 {  
13     public EmbeddedServletContainer getEmbeddedServletContainer(ServletContextInitializer... initializers)  
14     {  
15         //设置端口  
16         this.setPort(8081);  
17         return super.getEmbeddedServletContainer(initializers);  
18     }  
19       
20     protected void customizeConnector(Connector connector)  
21     {  
22         super.customizeConnector(connector);  
23         Http11NioProtocol protocol = (Http11NioProtocol)connector.getProtocolHandler();  
24         //设置最大连接数  
25         protocol.setMaxConnections(2000);  
26         //设置最大线程数  
27         protocol.setMaxThreads(2000);  
28         protocol.setConnectionTimeout(30000);  
29     }  
30 } 

  二:(推荐)

 1 package com.web.server;  
 2   
 3 import org.apache.catalina.connector.Connector;  
 4 import org.apache.coyote.http11.Http11NioProtocol;  
 5 import org.springframework.boot.context.embedded.EmbeddedServletContainerFactory;  
 6 import org.springframework.boot.context.embedded.tomcat.TomcatConnectorCustomizer;  
 7 import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory;  
 8 import org.springframework.context.annotation.Bean;  
 9 import org.springframework.context.annotation.Configuration;  
10   
11 @Configuration  
12 public class WebServerConfiguration  
13 {  
14     @Bean  
15     public EmbeddedServletContainerFactory createEmbeddedServletContainerFactory()  
16     {  
      //构建EmbeddedServletContainerFactory的bean,获取到TomcatEmbeddedServletContainerFactory实例以后可以对tomcat进行设置
17 TomcatEmbeddedServletContainerFactory tomcatFactory = new TomcatEmbeddedServletContainerFactory(); 18 tomcatFactory.setPort(8081); 19 tomcatFactory.addConnectorCustomizers(new MyTomcatConnectorCustomizer()); 20 return tomcatFactory; 21 } 22 } 23 public class MyTomcatConnectorCustomizer implements TomcatConnectorCustomizer 24 {
    @Override
25 public void customize(Connector connector) 26 { 27 Http11NioProtocol protocol = (Http11NioProtocol) connector.getProtocolHandler(); 28 //设置最大连接数 29 protocol.setMaxConnections(2000); 30 //设置最大线程数 31 protocol.setMaxThreads(2000); 32 protocol.setConnectionTimeout(30000); 33 } 34 }

  三:

 1 package com.web.server;  
 2   
 3 import org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainer;  
 4 import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer;  
 5 import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory;  
 6 import org.springframework.context.annotation.Bean;  
 7 import org.springframework.context.annotation.Configuration;  
 8   
 9 @Configuration  
10 public class WebServerConfiguration  
11 {  
12     @Bean  
13     public EmbeddedServletContainerCustomizer createEmbeddedServletContainerCustomizer()  
14     {  
15         return new MyEmbeddedServletContainerCustomizer();  
16     }  
17 }  
18   
19 public class MyEmbeddedServletContainerCustomizer implements EmbeddedServletContainerCustomizer  
20 {  
21     public void customize(ConfigurableEmbeddedServletContainer container)  
22     {  
23         TomcatEmbeddedServletContainerFactory tomcatFactory = (TomcatEmbeddedServletContainerFactory)container;  
24         tomcatFactory.setPort(8081);  
25         //下面的操作可以参照上面的方法  
26     }  
27 }  

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

posted @ 2018-05-29 09:45  追乌龟的兔子  阅读(188)  评论(0)    收藏  举报