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

 更新时间:2017年11月06日 10:02:23   投稿:mrr  
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
<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项目的内嵌容器,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • Java编程实现统计数组中各元素出现次数的方法

    Java编程实现统计数组中各元素出现次数的方法

    这篇文章主要介绍了Java编程实现统计数组中各元素出现次数的方法,涉及java针对数组的遍历、比较、运算等相关操作技巧,需要的朋友可以参考下
    2017-07-07
  • 详解在Spring-Boot中实现通用Auth认证的几种方式

    详解在Spring-Boot中实现通用Auth认证的几种方式

    这篇文章主要介绍了详解在Spring-Boot中实现通用Auth认证的几种方式,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • Java日常练习题,每天进步一点点(33)

    Java日常练习题,每天进步一点点(33)

    下面小编就为大家带来一篇Java基础的几道练习题(分享)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望可以帮到你
    2021-07-07
  • Java中Klass模型与类加载的详细机制

    Java中Klass模型与类加载的详细机制

    这篇文章主要介绍了Java中Klass模型与类加载的详细机制,java语言是在jvm中运行而jvm是不认识java代码的我们使用javac编译的class文件jvm是不认识的 所以有一个类加载的动作 这个动作就是把class字节码拼装成一个klass类型,需要的朋友可以参考下
    2023-08-08
  • MyBatis 结果映射的两种方式

    MyBatis 结果映射的两种方式

    本文主要介绍了MyBatis的结果映射机制,包括基本结果映射、复杂结果映射以及动态结果映射和延迟加载,通过合理配置结果映射,可以简化复杂查询结果,感兴趣的可以了解一下
    2024-11-11
  • Mybatis逻辑分页与物理分页PageHelper使用解析

    Mybatis逻辑分页与物理分页PageHelper使用解析

    这篇文章主要为大家介绍了Mybatis逻辑分页与物理分页PageHelper使用解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • Maven高级的聚合和继承的实现

    Maven高级的聚合和继承的实现

    在软件开发中,随着项目规模的扩大,单个模块的开发方式逐渐转变为多模块开发,这种方式带来了项目管理上的挑战,其中最常见的问题是模块间的依赖管理和版本控制问题,本文就来介绍一下
    2024-10-10
  • Idea中SpringBoot多模块项目的建立实现

    Idea中SpringBoot多模块项目的建立实现

    这篇文章主要介绍了Idea中SpringBoot多模块项目的建立实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • idea更改项目(模块)JDK版本的操作步骤

    idea更改项目(模块)JDK版本的操作步骤

    idea很多地方都设置了jdk版本,不同模块的jdk版本也可能不一样,下面这篇文章主要给大家介绍了关于idea更改项目(模块)JDK版本的操作步骤,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-11-11
  • java操作mongodb之多表联查的实现($lookup)

    java操作mongodb之多表联查的实现($lookup)

    这篇文章主要介绍了java操作mongodb之多表联查的实现($lookup),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03

最新评论