选择Spring Boot项目的内嵌容器
2017-10-17 15:42
465 查看
原文链接:http://www.jianshu.com/p/70233f90859c
Spring Boot工程的默认web容器是Tomcat,但是开发人员可以根据需要修改,例如使用Jetty或者Undertow,Spring Boot提供了对应的starters。
在pom文件中排除tomcat的starter
增加Jetty依赖
通过
Jetty容器启动
PS:如果您使用的gradle,则可以参考官方文档的做法——Use Jetty instead of Tomcat
支持上述切换的原因是Spring Boot的自动配置。我首先在spring-boot-starter-web依赖中排除Tomcat依赖,免得它跟Jetty形成依赖冲突。Spring Boot根据在classpath下扫描到的容器类的类型决定使用哪个web容器。
在IDEA中查看EmbeddedServletContainerAutoConfiguration类的内部结构,可以看到
同样得,可以看到对Tomcat也存在类似的判断和使用代码:
原文链接:http://www.jianshu.com/p/70233f90859c
Spring Boot工程的默认web容器是Tomcat,但是开发人员可以根据需要修改,例如使用Jetty或者Undertow,Spring Boot提供了对应的starters。
How Do
在pom文件中排除tomcat的starter<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依赖
<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容器。
@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也存在类似的判断和使用代码:
@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(); } }
原文链接:http://www.jianshu.com/p/70233f90859c
相关文章推荐
- 选择Spring Boot项目的内嵌容器(替换)
- 选择Spring Boot项目的内嵌容器的理由
- 选择Spring Boot项目的内嵌容器
- spring-boot开发:使用内嵌容器进行快速开发及测试
- 把Spring Boot项目部署到Tomcat容器中
- Web项目下整合springBoot+springMVC+mybatis+boot内嵌tomcat以及所需jar包
- Spring Boot 容器选择 Undertow 而不是 Tomcat
- 从零开始通过idea插件将一个spring boot项目部署到docker容器里运行
- SpringBoot项目打包部署外部JavaEE容器
- 把spring-boot项目部署到tomcat容器中
- spring boot实战(第七篇)内嵌容器tomcat配置
- 把spring-boot项目部署到tomcat容器中
- 把spring boot项目发布tomcat容器(包含发布到tomcat6的方法)
- QiYuAdmin-改造Quartz的Bean由SpringIOC容器管理(SpringBoot项目实战)
- IntelliJ IDEA 配置Gradle运行SpringBoot Web项目(tomcat容器)
- springboot内嵌容器的tomcat和jetty的切换原理
- 把spring-boot项目部署到tomcat容器中
- 把spring-boot项目部署到tomcat容器中
- spring-boot项目部署到tomcat容器中
- 使用SpringBoot搭建小型项目,集成mybatis,redis,swagger2,并部署在外部容器中。