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
<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>
<dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-jetty</artifactid> </dependency>
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项目的内嵌容器,希望对大家有所帮助
如对本文有疑问, 点击进行留言回复!!
浅析IDEA如何正确配置Gradle? GRADLE_USER_HOME 和 Gradle user home的区别
spring boot-2.1.16整合swagger-2.9.2 含yml配置文件的代码详解
有关IntelliJ IDEA中LeetCode插件配置问题
如何在Intellij中安装LeetCode刷题插件方便Java刷题
vscode检测到#include错误请更新includePath的解决方法
IDEA中使用Git拉取代码时报 Git pull failed原因及解决方法
Java8 Stream Collectors收集器使用方法解析
网友评论