选择Spring Boot项目的内嵌容器
2017-06-11 08:56
471 查看
Spring Boot工程的默认web容器是Tomcat,但是开发人员可以根据需要修改,例如使用Jetty或者Undertow,Spring Boot提供了对应的starters。
在pom文件中排除tomcat的starter
增加Jetty依赖
支持上述切换的原因是Spring Boot的自动配置。我首先在spring-boot-starter-web依赖中排除Tomcat依赖,免得它跟Jetty形成依赖冲突。Spring Boot根据在classpath下扫描到的容器类的类型决定使用哪个web容器。
在IDEA中查看EmbeddedServletContainerAutoConfiguration类的内部结构,可以看到
同样得,可以看到对Tomcat也存在类似的判断和使用代码:
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>
分析
支持上述切换的原因是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(); } }
相关文章推荐
- 选择Spring Boot项目的内嵌容器
- 选择Spring Boot项目的内嵌容器(替换)
- 选择Spring Boot项目的内嵌容器的理由
- spring-boot项目部署到tomcat容器中
- SpringBoot 项目如何在tomcat容器中运行
- 把spring boot项目发布tomcat容器(包含发布到tomcat6的方法)
- Spring Boot 容器选择 Undertow 而不是 Tomcat
- 使用外部容器运行spring-boot项目:不使用spring-boot内置容器让spring-boot项目运行在外部tomcat容器中
- 如何把spring boot项目部署到tomcat容器中
- 把spring-boot项目部署到tomcat容器中
- maven打包排除spring-boot内嵌tomcat容器依赖jar
- Spring Cloud (8) | Spring Boot项目改造成tomcat容器启动
- 把spring-boot项目部署到tomcat容器中
- 使用外部容器运行spring-boot项目:不使用spring-boot内置容器让spring-boot项目运行在外部tomcat容器中
- 把spring-boot项目部署到tomcat容器中
- spring boot -- 多个spring boot 项目部署到同一个web 容器
- Spring Boot---(9)SpringBoot项目发布到docker的tomcat容器
- springboot内嵌容器的tomcat和jetty的切换原理
- Spring Boot + Spring Cloud 实现权限管理系统 后端篇(十六):容器部署项目
- 把spring-boot项目部署到tomcat容器中