前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >选择Spring Boot项目的内嵌容器

选择Spring Boot项目的内嵌容器

作者头像
阿杜
发布于 2018-08-06 06:14:50
发布于 2018-08-06 06:14:50
58000
代码可运行
举报
文章被收录于专栏:阿杜的世界阿杜的世界
运行总次数:0
代码可运行

Spring Boot工程的默认web容器是Tomcat,但是开发人员可以根据需要修改,例如使用Jetty或者Undertow,Spring Boot提供了对应的starters。

How Do

  • 在pom文件中排除tomcat的starter
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<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依赖
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
  • 通过mvn spring-boot:run命令启动,可以看到Jetty已经启动。

Jetty容器启动

PS:如果您使用的gradle,则可以参考官方文档的做法——Use Jetty instead of Tomcat

分析

支持上述切换的原因是Spring Boot的自动配置。我首先在spring-boot-starter-web依赖中排除Tomcat依赖,免得它跟Jetty形成依赖冲突。Spring Boot根据在classpath下扫描到的容器类的类型决定使用哪个web容器。

在IDEA中查看EmbeddedServletContainerAutoConfiguration类的内部结构,可以看到@ConditionalOnClass({Servlet.class, Server.class, Loader.class, WebAppContext.class})这样的条件匹配注解,如果在Jetty的Jar包中可以找到上述三个类的实例,则决定使用jetty容器。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Configuration
@ConditionalOnClass({Servlet.class, Server.class, Loader.class, WebAppContext.class})
@ConditionalOnMissingBean(    value = {EmbeddedServletContainerFactory.class},    search = SearchStrategy.CURRENT)
public static class EmbeddedJetty {
    public EmbeddedJetty() {
    }
    @Bean
    public JettyEmbeddedServletContainerFactory jettyEmbeddedServletContainerFactory() {
        // 返回容器工厂实例,用于构造容器实例
        return new JettyEmbeddedServletContainerFactory();
    }
}

同样得,可以看到对Tomcat也存在类似的判断和使用代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Configuration
@ConditionalOnClass({Servlet.class, Tomcat.class})
@ConditionalOnMissingBean(    value = {EmbeddedServletContainerFactory.class},    search = SearchStrategy.CURRENT)
public static class EmbeddedTomcat {
    public EmbeddedTomcat() {
    }
    @Bean
    public TomcatEmbeddedServletContainerFactory tomcatEmbeddedServletContainerFactory() {
        return new TomcatEmbeddedServletContainerFactory();
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015.12.09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
SpringBoot切换Tomcat容器,SpringBoot使用Jetty容器
转载自 https://www.cnblogs.com/fanshuyao/p/8668059.html
allsmallpig
2021/02/25
7510
Springboot之spring-boot-autoconfigure模块
Spring的出现给我们管理bean的依赖注入提供了便捷,但是当我们需要使用通过pom引入的jar里面的一个bean时候,还是需要手动在xml配置文件里面主要注入的bean 。springboot则可以依据classpath里面的依赖内容来自动配置bean到IOC容器,Auto-configuration会尝试推断哪些beans是用户可能会需要的。比如如果HSQLDB包在当前classpath下,并且用户并没有配置其他数据库链接,这时候Auto-configuration功能会自动注入一个基于内存的数据库连接到应用的IOC容器。但是要开启这个自动配置功能需要添加@EnableAutoConfiguration注解。
加多
2018/09/06
8530
Springboot之spring-boot-autoconfigure模块
SpringBoot 笔记(十一):Servlet容器
SpringBoot 笔记 ( 十一 ):Servlet容器 SpringBoot默认使用Tomcat作为嵌入式的Servlet容器 1)、定制和修改Servlet容器的相关配置 1、修改配置文件中的和 server 有关的配置 ServerProperties【也是EmbeddedServletContainerCustomizer】 1234567 server.port=8081server.context-path=/crudserver.tomcat.uri-encoding=UTF-8//通用的
lwen
2018/06/19
1.3K0
Springboot内置容器原理
springboot强大的地方就是,相比于传统spring架构,省去了很多繁杂的配置,其中一个就是springboot支持了内置容器,启动的时候框架层面帮我们初始化和启动容器,我们更多的关心代码和业务逻辑实现即可,那么它是如何支持内置容器的,以及内置容器是如何初始化和启动的,本篇文章将展开详细分析。
叔牙
2022/01/20
1.7K0
Springboot内置容器原理
Spring Boot-4.servlet容器配置
Spring Boot默认Tomcat为Servlet容器,以Tomcat为例进行说明,Tomcat,Jetty,Undertow都是通用的。
悠扬前奏
2019/05/30
7950
SpringBoot 笔记 ( 四 ):web 开发
SpringBoot 笔记 (四): web 开发 1、SpringBoot对静态资源的映射规则 @ConfigurationProperties(prefix = "spring.resources", ignoreUnknownFields = false) public class ResourceProperties implements ResourceLoaderAware { //静态资源的路径 private static final String[] CLASSPATH_RESOURCE
lwen
2018/04/16
1.9K0
Spring Boot Server容器配置
参数配置容器 server.xx开头的是所有servlet容器通用的配置,server.tomcat.xx开头的是tomcat特有的参数,其它类似。 所有参数绑定配置类:org.springframework.boot.autoconfigure.web.ServerProperties 代码配置容器 除了利用上面的参数来自动配置servlet容器,还可以通过代码的方式。可以直接实现EmbeddedServletContainerCustomizer这个接口,ServerProperties也是实现这个
Java技术栈
2018/03/30
1.2K0
Spring Boot Server容器配置
15-SpringBoot自动配置-切换内置web服务器
SpringBoot的Web环境中默认使用tomcat作为内置服务器,其实SpringBoot提供了4种内置服务器供我们选择,我们可以很方便的切换。
Devops海洋的渔夫
2022/03/23
1.7K0
15-SpringBoot自动配置-切换内置web服务器
我们如何看SpringBoot的源代码
The @SpringBootApplication annotation is equivalent to using @Configuration, @EnableAutoConfiguration, and @ComponentScan with their default attributes
chengcheng222e
2021/11/04
1.2K0
Springboot启动分析
    如下List-1所示是我们平时使用Springboot的方式,底层上发生了些什么呢,我们接下来分析下。
克虏伯
2019/06/20
4450
配置嵌入式Servlet容器
SpringBoot默认是用的是Tomcat作为嵌入式的Servlet容器; 问题? 1)、如何定制和修改Servlet容器的相关配置; 1、修改和server有关的配置(ServerProperties): server.port=8081 server.context-path=/crud server.tomcat.uri-encoding=UTF-8 //通用的Servlet容器设置 server.xxx //Tomcat的设置 server.tomcat.xxx 2、编写一个EmbeddedSe
用户1112962
2018/07/03
6450
Spring Boot 容器选择 Undertow 而不是 Tomcat
Spring Boot内嵌容器支持Tomcat、Jetty、Undertow。为什么选择Undertow?
lyb-geek
2022/03/09
2K0
Spring Boot第七章-Spring Boot Web配置-Tomcat配置
直接在application配置文件中配置即可,servlet容器配置以server为前缀,而tomcat的特有配置以server.tomcat为前缀,至于有哪些参数可以在实际工作中需要了再找。配置例子:
全栈程序员站长
2021/05/19
1.1K0
springboot(21)容器整合
SpringBoot可以嵌入容器从而更好实现微服务,默认支持Tomcat和Jetty的嵌入,只需要在POM文件中导入相应的依赖即可。在有些场景下,我们需要将服务发布到项目早已搭建好的WEB容器中。常见
IT架构圈
2018/06/01
8150
Spring Boot笔记
–jdk1.8:Spring Boot 推荐jdk1.7及以上;java version “1.8.0_112”
瑞新
2020/07/08
1.2K0
SpringBoot自动装配原理(简单易懂)
自动装配就是把别人(官方)写好的config配置类加载到spring容器,然后根据这个配置类生成一些项目需要的bean对象。 (小声逼逼:就像我们自己在项目了写的config配置类一样的,只不过这个是别人写好的,你什么都不用管)
全栈程序员站长
2022/11/16
4.2K0
SpringBoot自动装配原理(简单易懂)
Spring Boot 配置-Spring Boot教程深入浅出系列
Spring Boot 可以做很多事情;在本教程中,我们将介绍 Boot 中一些更有趣的配置选项。
jack.yang
2025/04/05
1470
Spring Boot条件化自动装配
Class条件注解有一对语义相反的注解,@ConditionalOnClass和@ConditionalOnMissClass分别表达"当指定类存在时"和"当指定类不存在时"的语义。
星哥玩云
2022/09/15
5390
详述 Spring Boot 中内嵌 Tomcat 的实现原理
对于一个 Spring Boot Web 工程来说,一个主要的依赖标志就是有spring-boot-starter-web这个starter,spring-boot-starter-web模块在 Spring Boot 中其实并没有代码存在,只是在pom.xml中携带了一些依赖,包括web、webmvc和tomcat等:
CG国斌
2020/06/04
6K0
Spring Boot项目的内嵌容器
刚才开始使用spring boot的开发者会有种很直观的感觉,servlet容器“不见了”。之前开发web项目,都是把程序写完后部署到servlet容器(比如Tomcat),但是使用spring boot开发项目,写完程序后直接就能运行了,觉得些许奇怪! 其实呢,这是因为Spring Boot中内嵌了Tomcat、Jetty和Undertow服务器。之所以开发者在默认情况下不需要做任何配置,是因为spring boot提供了一个名为EmbeddedServletContainerAutoConfiguration的配置类 (@Configuration注解的类),spring boot能实现“零配置”,是因为spring定义了好多这样的配置类(配置没有少,只是以前由开发者自己的工作交由spring完成了),这种情况下大多数开发人员将只需使用适当的“启动器”来获得一个完全配置的实例。spring-boot-starter-web默认使用嵌套式的Tomcat作为Web容器对外提供HTTP服务,默认端口8080对外监听和提供服务。但同样可以使用spring-boot-starter-jetty或者spring-boot-starter-undertow作为Web容器。
jack.yang
2025/04/05
1020
相关推荐
SpringBoot切换Tomcat容器,SpringBoot使用Jetty容器
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验