SpringBoot切換Tomcat容器,web
SpringBoot修改成Jetty容器,spring
SpringBoot使用undertow容器,tomcat
SpringBoot使用Jetty容器jsp
================================spring-boot
©Copyright 蕃薯耀 2018年3月29日spa
http://www.cnblogs.com/fanshuyao/xml
附件&源碼下載見:http://fanshuyao.iteye.com/blog/2414809blog
1、SpringBoot默認的容器爲Tomcat,依賴包在spring-boot-starter-web下ci
- <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>

2、SpringBoot把容器修改成Jetty源碼
方法很簡單,就是在pom.xml文件中,在引用的spring-boot-starter-web排除Tomcat的依賴包,而後再引入Jetty容器的依賴包,以下:
- <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>
-
-
-
- <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>
3、SpringBoot把容器修改成undertow
- <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>
-
-
-
- <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>
4、爲何能夠這樣切換呢?
由於SpringBoot在org.springframework.boot.autoconfigure.web.EmbeddedServletContainerAutoConfiguration類中已經配置好,根據依賴的Jar包自動切換,代碼以下:
- @Configuration
- @ConditionalOnClass({ Servlet.class, Tomcat.class })
- @ConditionalOnMissingBean(value = EmbeddedServletContainerFactory.class, search = SearchStrategy.CURRENT)
- public static class EmbeddedTomcat {
-
- @Bean
- public TomcatEmbeddedServletContainerFactory tomcatEmbeddedServletContainerFactory() {
- return new TomcatEmbeddedServletContainerFactory();
- }
-
- }
-
-
- @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();
- }
-
- }
-
-
- @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();
- }
-
- }
方法上註解根據依賴的容器Jar包判斷使用哪一個容器:
如:
一、tomcat容器
- @ConditionalOnClass({ Servlet.class, Tomcat.class })
表示有使用類Tomcat.class則是tomcat容器
二、Jetty容器
- @ConditionalOnClass({ Servlet.class, Server.class, Loader.class,
- WebAppContext.class })
三、undertow容器
- @ConditionalOnClass({ Servlet.class, Undertow.class, SslClientAuthMode.class })
================================
©Copyright 蕃薯耀 2018年3月29日
http://www.cnblogs.com/fanshuyao/