转载自 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默认的容器为Tomcat,依赖包在spring-boot-starter-web下

Xml代码  收藏代码

  1. <dependencies>
  2. <dependency>
  3. <groupId>org.springframework.boot</groupId>
  4. <artifactId>spring-boot-starter-web</artifactId>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.springframework.boot</groupId>
  8. <artifactId>spring-boot-starter-test</artifactId>
  9. <scope>test</scope>
  10. </dependency>
  11. </dependencies>

二、SpringBoot把容器修改为Jetty

方法很简单,就是在pom.xml文件中,在引用的spring-boot-starter-web排除Tomcat的依赖包,然后再引入Jetty容器的依赖包,如下:

Xml代码  收藏代码

  1. <dependencies>
  2. <dependency>
  3. <groupId>org.springframework.boot</groupId>
  4. <artifactId>spring-boot-starter-web</artifactId>
  5. <exclusions>
  6. <exclusion>
  7. <groupId>org.springframework.boot</groupId>
  8. <artifactId>spring-boot-starter-tomcat</artifactId>
  9. </exclusion>
  10. </exclusions>
  11. </dependency>
  12. <!-- Jetty适合长连接应用,就是聊天类的长连接 -->
  13. <!-- 使用Jetty,需要在spring-boot-starter-web排除spring-boot-starter-tomcat,因为SpringBoot默认使用tomcat -->
  14. <dependency>
  15. <groupId>org.springframework.boot</groupId>
  16. <artifactId>spring-boot-starter-jetty</artifactId>
  17. </dependency>
  18. <dependency>
  19. <groupId>org.springframework.boot</groupId>
  20. <artifactId>spring-boot-starter-test</artifactId>
  21. <scope>test</scope>
  22. </dependency>
  23. </dependencies>

三、SpringBoot把容器修改为undertow

Xml代码  收藏代码

  1. <dependencies>
  2. <dependency>
  3. <groupId>org.springframework.boot</groupId>
  4. <artifactId>spring-boot-starter-web</artifactId>
  5. <exclusions>
  6. <exclusion>
  7. <groupId>org.springframework.boot</groupId>
  8. <artifactId>spring-boot-starter-tomcat</artifactId>
  9. </exclusion>
  10. </exclusions>
  11. </dependency>
  12. <!-- undertow不支持jsp -->
  13. <!-- 使用undertow,需要在spring-boot-starter-web排除spring-boot-starter-tomcat,因为SpringBoot默认使用tomcat -->
  14. <dependency>
  15. <groupId>org.springframework.boot</groupId>
  16. <artifactId>spring-boot-starter-undertow</artifactId>
  17. </dependency>
  18. <dependency>
  19. <groupId>org.springframework.boot</groupId>
  20. <artifactId>spring-boot-starter-test</artifactId>
  21. <scope>test</scope>
  22. </dependency>
  23. </dependencies>

四、为什么可以这样切换呢?

因为SpringBoot在org.springframework.boot.autoconfigure.web.EmbeddedServletContainerAutoConfiguration类中已经配置好,根据依赖的Jar包自动切换,代码如下:

Java代码  收藏代码

  1. /**
  2. * Nested configuration if Tomcat is being used.
  3. */
  4. @Configuration
  5. @ConditionalOnClass({ Servlet.class, Tomcat.class })
  6. @ConditionalOnMissingBean(value = EmbeddedServletContainerFactory.class, search = SearchStrategy.CURRENT)
  7. public static class EmbeddedTomcat {
  8. @Bean
  9. public TomcatEmbeddedServletContainerFactory tomcatEmbeddedServletContainerFactory() {
  10. return new TomcatEmbeddedServletContainerFactory();
  11. }
  12. }
  13. /**
  14. * Nested configuration if Jetty is being used.
  15. */
  16. @Configuration
  17. @ConditionalOnClass({ Servlet.class, Server.class, Loader.class,
  18. WebAppContext.class })
  19. @ConditionalOnMissingBean(value = EmbeddedServletContainerFactory.class, search = SearchStrategy.CURRENT)
  20. public static class EmbeddedJetty {
  21. @Bean
  22. public JettyEmbeddedServletContainerFactory jettyEmbeddedServletContainerFactory() {
  23. return new JettyEmbeddedServletContainerFactory();
  24. }
  25. }
  26. /**
  27. * Nested configuration if Undertow is being used.
  28. */
  29. @Configuration
  30. @ConditionalOnClass({ Servlet.class, Undertow.class, SslClientAuthMode.class })
  31. @ConditionalOnMissingBean(value = EmbeddedServletContainerFactory.class, search = SearchStrategy.CURRENT)
  32. public static class EmbeddedUndertow {
  33. @Bean
  34. public UndertowEmbeddedServletContainerFactory undertowEmbeddedServletContainerFactory() {
  35. return new UndertowEmbeddedServletContainerFactory();
  36. }
  37. }

方法上注解根据依赖的容器Jar包判断使用哪个容器:

如:

1、tomcat容器

Java代码  收藏代码

  1. @ConditionalOnClass({ Servlet.class, Tomcat.class })

表示有使用类Tomcat.class则是tomcat容器

2、Jetty容器

Java代码  收藏代码

  1. @ConditionalOnClass({ Servlet.class, Server.class, Loader.class,
  2. WebAppContext.class })

3、undertow容器

Java代码  收藏代码

  1. @ConditionalOnClass({ Servlet.class, Undertow.class, SslClientAuthMode.class })

================================

©Copyright 蕃薯耀 2018年3月29日

http://www.cnblogs.com/fanshuyao/

SpringBoot切换Tomcat容器,SpringBoot使用Jetty容器相关推荐

  1. springboot ---坑 tomcat部署springboot 一直运行不起来

    1.首先部署springboot项目的tomcat的版本必须在8.0之后 2.springboot 同样是基于maven的,那么在pom.xml中的tomcat的依赖: <dependency& ...

  2. springboot 4大默认容器、指定运行容器

    总结:假如自定义依赖全部存在,则执行生效顺序依次为 tomcat > jetty > undertow > netty private static RequestUpgradeSt ...

  3. springboot需要tomcat服务器吗_SpringBoot学习(二):内嵌服务器引擎(Tomcat,Jetty)实现原理...

    概述 SpringBoot使用main方法启动的一个重要特性是,不需要打包成war部署到Tomcat这种Servlet容器中,而是只需打包成jar,然后通过java或mvn等命令运行这个jar包,然后 ...

  4. Spring Boot配置Tomcat容器、Jetty容器、Undertow容器

    Spring Boot配置Tomcat容器.Jetty容器.Undertow容器 Tomcat.Jetty.Undertow Tomcat概述 Jetty概述 Undertow概述 Spring Bo ...

  5. SpringBoot源码分析之内置Servlet容器

    原文链接:http://fangjian0423.github.io/2017/05/22/springboot-embedded-servlet-container/ SpringBoot内置了Se ...

  6. springBoot将Service实现类交给spring容器管理的两种方法

    方法一: 在类名上面添加@Service注解 方法二: 添加配置文件,配置文件里添加添加方法如下的方法,并加@Bean注解 springBoot将(Service实现)类交给spring容器管理的目的 ...

  7. SpringBoot 配置Tomcat运行

    SpringBoot 本身支持有两类的 WEB 容器:默认的 Tomcat.Jetty,那么现在如果从实际的角度来看, 在 SpringBoot 运行的时候 即使没有 WEB 容器,那么也可以采用自定 ...

  8. SpringBoot系列六:SpringBoot整合Tomcat

    声明:本文来源于MLDN培训视频的课堂笔记,写在这里只是为了方便查阅. 1.概念:SpringBoot 整合 Tomcat 2.背景 SpringBoot 本身支持有两类的 WEB 容器:默认的 To ...

  9. SpringBoot嵌入Tomcat原理分析

    SpringBoot嵌入Tomcat原理 内嵌Tomcat启动原理 首先,来到启动SpringBoot项目的地方,也就是朱配置类. @SpringBootApplication public clas ...

最新文章

  1. MySQL测试环境遇到 mmap(xxx bytes) failed; errno 12解决方法
  2. 鼠标位置精确定位总结
  3. java 使用servlet做学生管理系统(无框架)
  4. java要从数据查出五百多万条数据_100w条数据 | 插入Mysql你要用多长时间?
  5. MVC5+EF6 入门完整教程十
  6. 从长板和咏春看单板滑雪固定器角度选择
  7. 教育真的可以改变命运?
  8. Android API Guides---Supporting Tablets and Handsets
  9. mysql数据备份数据解决方案_MYSQL数据备份解决方案
  10. 【位运算经典应用】 N皇后问题
  11. 新浪微博api的使用
  12. 苹果电脑语音听写的问题(电话中间加-,或者想要大写应该怎么设置呢)
  13. Docker部署Nebula Graph2.0和Studio
  14. 02_RampTexture(渐变纹理)
  15. Ubuntu下载ROMS源码
  16. Nginx的 HTTP 499 状态码处理
  17. win10升级后删除自带的微软输入法
  18. 医院影像图像科室工作站PACS系统 DICOM 三维图像后处理与重建
  19. 乐高机器人编程主要学什么
  20. java reference详解_你不可不知的Java引用类型之——Reference源码解析

热门文章

  1. Catalan数推导及应用
  2. [Windows驱动开发](三)基础知识——驱动例程
  3. python新式类和经典类的区别?
  4. Linux 写时复制机制原理
  5. “新型肺炎患者同乘查询系统”上线,超2千万用户使用
  6. 灵光一现的创造——霍夫曼编码
  7. Netflix:为什么建立专门的媒体数据库?
  8. Xilinx:让FFmpeg在FPGA上玩的爽
  9. C/C++学习之路: C++对C的扩展
  10. 「递归」第6集 | 是鹅厂技术青年的模样