服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - 选择Spring Boot项目的内嵌容器的理由

选择Spring Boot项目的内嵌容器的理由

2021-01-30 12:27jianshu Java教程

Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。这篇文章主要介绍了选择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
?
1
2
3
4
5
6
7
8
9
10
<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依赖
?
1
2
3
4
<dependency>
 <groupid>org.springframework.boot</groupid>
 <artifactid>spring-boot-starter-jetty</artifactid>
</dependency>
  • 通过mvn spring-boot:run命令启动,可以看到jetty已经启动。

选择Spring Boot项目的内嵌容器的理由

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容器。

?
1
2
3
4
5
6
7
8
9
10
11
12
@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也存在类似的判断和使用代码:

?
1
2
3
4
5
6
7
8
9
10
11
@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项目的内嵌容器,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对服务器之家网站的支持!

原文链接:http://www.jianshu.com/p/70233f90859c

延伸 · 阅读

精彩推荐