您的位置:首页 > 运维架构 > Tomcat

SpringBoot优化内嵌的Tomcat

2017-10-27 16:28 411 查看
SpringBoot测试版本

[html] view
plain copy

<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的性能,如何调整这个最大连接数呢?

以下有三种方法

一:

[java] view
plain copy

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);  

    }  

}  

二:

[java] view
plain copy

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);  

    }  

}  

三:

[java] view
plain copy

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: