亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

spring-boot定制和優化內嵌的Tomcat

標簽:
SpringBoot

springboot为我们内嵌了三种容器供我们使用:Tomcat、Jetty和undertow,默认使用tomcat

webp

springboot内嵌的三种容器

本文介绍两种方式来定制springboot内嵌的Tomcat

第一种方式

@SpringBootConfigurationpublic class WebServerConfiguration {    @Bean
    public EmbeddedServletContainerFactory embeddedServletContainerFactory() {
        TomcatEmbeddedServletContainerFactory factory = new TomcatEmbeddedServletContainerFactory();        
        //设置端口号
        factory.setPort(8888);        //factory这个对象中还有很多的Spring容器级别的参数可以设置,例如我们前几篇文章中讲到的Initializers、Listeners、Tomcat日志等

        //设置Tomcat连接池...
        //这是以java8的做法来实现的,事实上就是编写一个内部类,不熟悉Java8的读者可以借鉴下面的实现方式
        factory.addConnectorCustomizers((connector -> {
            Http11NioProtocol protocol = (Http11NioProtocol) connector.getProtocolHandler();
            protocol.setMaxThreads(200);
            protocol.setMaxConnections(1000);            //protocol这个对象中还有很多tomcat的参数可以设置,读者可以自己了解了解。
        }));        /*factory.addConnectorCustomizers(new TomcatConnectorCustomizer() {
            @Override
            public void customize(Connector connector) {
                Http11NioProtocol protocol = (Http11NioProtocol) connector.getProtocolHandler();
                protocol.setMaxThreads(200);
                protocol.setMaxConnections(1000);
            }
        });*/
        return factory;
    }
}

第二种方式

编写类,实现EmbeddedServletContainerCustomizer接口,重写抽象方法,并将这个类加入spring容器中管理。

@Componentpublic class MyEmbeddedServletContainerCustomizer implements EmbeddedServletContainerCustomizer {    @Override
    public void customize(ConfigurableEmbeddedServletContainer container) {        //和第一种方法一样,我们又拿到了这个factory对象,我们就可以接着搞事情了....
        TomcatEmbeddedServletContainerFactory factory = (TomcatEmbeddedServletContainerFactory) container;        //......
    }
}

其实,第一种方式来自于springboot源码的实现,我们可以打开EmbeddedServletContainerAutoConfiguration这个类阅读一下源码。

webp

EmbeddedServletContainerAutoConfiguration.class

springboot源码的实现方式和我们的第一种实现方式一模一样,只不过源码作者仅仅是new TomcatEmbeddedServletContainerFactory()而已,并没有添加任何的配置参数。红框的部分我们在Spring-Boot autoconfigure之Condition这一小节讲过,当spring容器中没有TomcatEmbeddedServletContainerFactory这个bean时,才会把此bean加载进Spring容器中。显然我们自己编写了一个Tomcat的Configuration后,图中的bean将不会被加载。由于篇幅有限,截图的这个类的下面还有jetty、Undertow的代码,和Tomcat的实现是一样的,这里就不介绍了,读者感兴趣可以自己一探究竟。

另外,再介绍一下如何将springboot默认使用的tomcat容器换成jetty或其他容器,只需在pom.xml中排除掉spring-boot-starter-tomcat的引用,加上spring-boot-starter-jetty的引用就好了。

好啦,本节内容就到这里,感兴趣的读者可以持续关注我的springboot系列博客~



作者:八目朱勇铭
链接:https://www.jianshu.com/p/4ee2628b1cb5


點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消