您好,登录后才能下订单哦!
这篇文章将为大家详细讲解有关为什么选择Spring Boot项目的内嵌容器,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。
Spring Boot继承了Spring的优点,并新增了一些新功能和特性:
(1)SpringBoot是伴随着Spring4.0诞生的,一经推出,引起了巨大的反向;
(2)从字面理解,Boot是引导的意思,因此SpringBoot帮助开发者快速搭建Spring框架;
(3)SpringBoot帮助开发者快速启动一个Web容器;
(4)SpringBoot继承了原有Spring框架的优秀基因;
(5)SpringBoot简化了使用Spring的过程;
(6)Spring Boot为我们带来了脚本语言开发的效率,但是Spring Boot并没有让我们意外的新技术,都是Java EE开发者常见的额技术。
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(); } }
关于“为什么选择Spring Boot项目的内嵌容器”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。