Spring Boot如何優(yōu)化內嵌的Tomcat示例詳解
前言
本文主要給大家介紹了關于Spring Boot優(yōu)化內嵌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中默認可以通過配置如下參數(shù)設置內嵌容器Tomcat的端口,最大線程數(shù)等等
server.port=8081 server.tomcat.max-threads=1000
但是,無法設置最大連接數(shù),而最大連接數(shù)直接影響到Tomcat的性能,如何調整這個最大連接數(shù)呢?
以下有三種方法
第一種:
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();
//設置最大連接數(shù)
protocol.setMaxConnections(2000);
//設置最大線程數(shù)
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();
//設置最大連接數(shù)
protocol.setMaxConnections(2000);
//設置最大線程數(shù)
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);
//下面的操作可以參照上面的方法
}
}
最后,如果發(fā)現(xiàn)沒有生效,就把application.properties配置里面關于Tomcat的一些配置(server.*)全部刪掉,就OK了。
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關文章
攔截Druid數(shù)據(jù)源自動注入帳密解密實現(xiàn)詳解
這篇文章主要為大家介紹了攔截Druid數(shù)據(jù)源自動注入帳密解密實現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-11-11
Spring Boot利用Docker快速部署項目的完整步驟
這篇文章主要給大家介紹了關于Spring Boot利用Docker快速部署項目的完整步驟,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Spring Boot具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧2019-07-07
Java 數(shù)據(jù)流之Broadcast State
這篇文章主要介紹了Java 數(shù)據(jù)流之Broadcast State,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-09-09

