生活随笔
收集整理的這篇文章主要介紹了
SpringBoot切换Tomcat容器,SpringBoot使用Jetty容器
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
轉(zhuǎn)載自?https://www.cnblogs.com/fanshuyao/p/8668059.html
SpringBoot切換Tomcat容器,
SpringBoot修改為Jetty容器,
SpringBoot使用undertow容器,
SpringBoot使用Jetty容器
================================
?Copyright?蕃薯耀 2018年3月29日
http://www.cnblogs.com/fanshuyao/
?
附件&源碼下載見:http://fanshuyao.iteye.com/blog/2414809
?
一、SpringBoot默認(rèn)的容器為Tomcat,依賴包在spring-boot-starter-web下
Xml代碼??
<dependencies>??????????<dependency>??????????????<groupId>org.springframework.boot</groupId>??????????????<artifactId>spring-boot-starter-web</artifactId>??????????</dependency>????????????<dependency>??????????????<groupId>org.springframework.boot</groupId>??????????????<artifactId>spring-boot-starter-test</artifactId>??????????????<scope>test</scope>??????????</dependency>????</dependencies>??
?
?
二、SpringBoot把容器修改為Jetty
方法很簡單,就是在pom.xml文件中,在引用的spring-boot-starter-web排除Tomcat的依賴包,然后再引入Jetty容器的依賴包,如下:
Xml代碼??
<dependencies>??????????<dependency>??????????????<groupId>org.springframework.boot</groupId>??????????????<artifactId>spring-boot-starter-web</artifactId>??????????????<exclusions>??????????????????<exclusion>??????????????????????<groupId>org.springframework.boot</groupId>??????????????????????<artifactId>spring-boot-starter-tomcat</artifactId>??????????????????</exclusion>??????????????</exclusions>??????????</dependency>????????????<!--?Jetty適合長連接應(yīng)用,就是聊天類的長連接?-->??????????<!--?使用Jetty,需要在spring-boot-starter-web排除spring-boot-starter-tomcat,因為SpringBoot默認(rèn)使用tomcat?-->??????????<dependency>??????????????<groupId>org.springframework.boot</groupId>??????????????<artifactId>spring-boot-starter-jetty</artifactId>??????????</dependency>??????????<dependency>??????????????<groupId>org.springframework.boot</groupId>??????????????<artifactId>spring-boot-starter-test</artifactId>??????????????<scope>test</scope>??????????</dependency>??</dependencies>??
?
三、SpringBoot把容器修改為undertow
Xml代碼??
<dependencies>??????????<dependency>??????????????<groupId>org.springframework.boot</groupId>??????????????<artifactId>spring-boot-starter-web</artifactId>??????????????<exclusions>??????????????????<exclusion>??????????????????????<groupId>org.springframework.boot</groupId>??????????????????????<artifactId>spring-boot-starter-tomcat</artifactId>??????????????????</exclusion>??????????????</exclusions>??????????</dependency>????????????????????<!--?undertow不支持jsp?-->??????????<!--?使用undertow,需要在spring-boot-starter-web排除spring-boot-starter-tomcat,因為SpringBoot默認(rèn)使用tomcat?-->??????????<dependency>??????????????<groupId>org.springframework.boot</groupId>??????????????<artifactId>spring-boot-starter-undertow</artifactId>??????????</dependency>????????????????????<dependency>??????????????<groupId>org.springframework.boot</groupId>??????????????<artifactId>spring-boot-starter-test</artifactId>??????????????<scope>test</scope>??????????</dependency>??</dependencies>??
?
四、為什么可以這樣切換呢?
因為SpringBoot在org.springframework.boot.autoconfigure.web.EmbeddedServletContainerAutoConfiguration類中已經(jīng)配置好,根據(jù)依賴的Jar包自動切換,代碼如下:
Java代碼??
/**??????*?Nested?configuration?if?Tomcat?is?being?used.??????*/??????@Configuration??????@ConditionalOnClass({?Servlet.class,?Tomcat.class?})??????@ConditionalOnMissingBean(value?=?EmbeddedServletContainerFactory.class,?search?=?SearchStrategy.CURRENT)??????public?static?class?EmbeddedTomcat?{????????????@Bean??????????public?TomcatEmbeddedServletContainerFactory?tomcatEmbeddedServletContainerFactory()?{??????????????return?new?TomcatEmbeddedServletContainerFactory();??????????}????????}????????/**??????*?Nested?configuration?if?Jetty?is?being?used.??????*/??????@Configuration??????@ConditionalOnClass({?Servlet.class,?Server.class,?Loader.class,??????????????WebAppContext.class?})??????@ConditionalOnMissingBean(value?=?EmbeddedServletContainerFactory.class,?search?=?SearchStrategy.CURRENT)??????public?static?class?EmbeddedJetty?{????????????@Bean??????????public?JettyEmbeddedServletContainerFactory?jettyEmbeddedServletContainerFactory()?{??????????????return?new?JettyEmbeddedServletContainerFactory();??????????}????????}????????/**??????*?Nested?configuration?if?Undertow?is?being?used.??????*/??????@Configuration??????@ConditionalOnClass({?Servlet.class,?Undertow.class,?SslClientAuthMode.class?})??????@ConditionalOnMissingBean(value?=?EmbeddedServletContainerFactory.class,?search?=?SearchStrategy.CURRENT)??????public?static?class?EmbeddedUndertow?{????????????@Bean??????????public?UndertowEmbeddedServletContainerFactory?undertowEmbeddedServletContainerFactory()?{??????????????return?new?UndertowEmbeddedServletContainerFactory();??????????}????????}??
??
方法上注解根據(jù)依賴的容器Jar包判斷使用哪個容器:
如:
1、tomcat容器
Java代碼??
@ConditionalOnClass({?Servlet.class,?Tomcat.class?})??
表示有使用類Tomcat.class則是tomcat容器
?
2、Jetty容器
Java代碼??
@ConditionalOnClass({?Servlet.class,?Server.class,?Loader.class,??????????????WebAppContext.class?})??
?
3、undertow容器
Java代碼??
@ConditionalOnClass({?Servlet.class,?Undertow.class,?SslClientAuthMode.class?})??
?
================================
?Copyright?蕃薯耀 2018年3月29日
http://www.cnblogs.com/fanshuyao/
總結(jié)
以上是生活随笔為你收集整理的SpringBoot切换Tomcat容器,SpringBoot使用Jetty容器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。