springboot详解

Spring Boot的特点

Spring Boot是一个用于简化Spring应用程序开发和部署的框架,具有以下几个特点:

  1. 简化配置:Spring Boot采用约定大于配置的原则,通过自动配置和默认值,可以大大减少配置量。它提供了大量的Starter(启动器)依赖,可以一站式引入需要的模块,而无需手动配置各种库的版本和依赖关系。
  2. 内嵌服务器:Spring Boot内置了多种常见的Web服务器(如Tomcat、Jetty),可以直接将应用程序打包成可执行的JAR文件,并通过命令行或脚本方式运行,无需外部容器的支持。这样可以简化部署和运维的过程。
  3. 自动配置:Spring Boot通过分析应用程序的类路径和依赖关系,自动配置各种常用的功能,如数据源、视图解析器、日志系统等。开发者只需在配置文件中指定必要的属性,即可快速搭建起一个可用的应用程序。
  4. 健康检查:Spring Boot提供了健康指标监控功能,可以监测应用程序的运行状态,并提供了一个简单易用的端点(Endpoint),方便进行诊断和监控。
  5. 生态系统:Spring Boot建立在Spring框架之上,拥有丰富而成熟的Spring生态系统。通过Spring Boot,可以方便地集成Spring的各种模块,如Spring MVC、Spring Data、Spring Security等,提供全面的企业级应用开发解决方案。
  6. 可扩展性:尽管Spring Boot提供了很多默认配置和功能,但它也允许开发者进行自定义和扩展。开发者可以根据需要增加或修改配置,覆盖默认行为,以满足特定的业务需求。
    总体而言,Spring Boot的特点在于简化配置、内嵌服务器、自动配置、健康检查、丰富的生态系统和可扩展性。这些特性使得开发者可以更快速、更高效地构建独立的、生产级别的Spring应用程序,并极大地简化了开发和部署的过程。

Spring Boot版本

Spring Boot 是基于 Spring 框架的快速开发框架,它简化了 Spring 应用程序的搭建和配置过程。下面是一些常见的 Spring Boot 版本:

  1. Spring Boot 1.x:这是最早发布的版本,提供了许多自动配置选项,简化了 Spring 应用程序的开发和部署过程。它支持嵌入式 Servlet 容器(如 Tomcat、Jetty 等),并提供了丰富的开箱即用功能。
  2. Spring Boot 2.x:这是当前主要的稳定版本,引入了一些重大改进和新特性。它支持 Java 8+,并改进了性能、安全性和监控等方面。还增加了对响应式编程模型的支持,并提供了 Spring WebFlux 和 Spring Data 的新功能。
    需要注意的是,每个 Spring Boot 版本都会有维护的时间周期,包括修复错误、提供安全更新和支持新的功能。因此,在选择 Spring Boot 版本时,建议使用最新的稳定版本以获得更好的性能、安全性和可靠性。
    您可以参考 Spring Boot 官方网站或 GitHub 页面,了解每个版本的发布说明和更新内容,以确保选择适合您项目需求的版本。
    Spring Boot 是基于 Spring 框架的快速开发框架,它可以与多个版本的 Spring 框架进行集成。具体来说,不同的 Spring Boot 版本会与不同的 Spring 框架版本进行兼容。
    在常见的情况下,Spring Boot 版本与对应的 Spring 框架版本关系如下:
    ● Spring Boot 1.x.x 使用的是 Spring Framework 4.x 版本。
    ● Spring Boot 2.x.x 使用的是 Spring Framework 5.x 版本。
    需要注意的是,尽管 Spring Boot 版本与 Spring 框架版本存在一定的关联性,但并不意味着您必须使用特定的 Spring 框架版本才能使用相应的 Spring Boot 版本。Spring Boot 可以与 Spring 框架的较新版本兼容,但需要确保它们能够正确地集成和协同工作
    spring boot3.0 ,对应着Java17

Spring Boot 的优点

配置简单
独立运行
自动装配
无代码生成和 xml 配置
提供应用监控
易上手
提升开发效率
配置简单 独立运行 自动装配 无代码生成和 xml 配置 提供应用监控 易上手 提升开发效率
1、减少开发,测试时间和努力。
2、使用 JavaConfig 有助于避免使用 XML。
3、避免大量的 Maven 导入和各种版本冲突。
4、提供意见发展方法。
5、通过提供默认值快速开始开发。
6、没有单独的 Web 服务器需要。这意味着你不再需要启动 Tomcat,Glassfish或其他任何东西。
7、需要更少的配置 因为没有 web.xml 文件。只需添加用@ Configuration 注释的类,然后添加用@Bean 注释的方法,Spring 将自动加载对象并像以前一样对其进行管理。您甚至可以将@Autowired 添加到 bean 方法中,以使 Spring 自动装入需要的依赖关系中。
8、基于环境的配置 使用这些属性,您可以将您正在使用的环境传递到应用程序:-Dspring.profiles.active = {enviornment}。在加载主应用程序属性文件后,Spring 将在(application{environment} .properties)中加载后续的应用程序属性文件。

Spring Boot 约定优于配置的理解

首先,约定优于配置是一种软件设计的范式,它的核心思想是减少软件开发人员对于配置项的维护,从而让开发人员更加聚焦在业务逻辑上。Spring Boot 就是约定优于配置这一理念下的产物,它类似于 Spring 框架下的一
个脚手架,通过 Spring Boot,我们可以快速开发基于 Spring 生态下的应用程序。基于传统的 Spring 框架开发 web 应用,我们需要做很多和业务开发无关并且只需要做一次的配置,比如管理 jar 包依赖、web.xml 维护
Dispatch-Servlet.xml 配置项维护、应用部署到 Web 容器、第三方组件集成到 Spring IOC 容器中的配置项维护
而在 Spring Boot 中,我们不需要再去做这些繁琐的配置,Spring Boot 已经自动帮我们完成了,这就是约定由于配置思想的体现。
1、Spring Boot Starter 启动依赖,它能帮我们管理所有 jar 包版本;
2、Spring Boot会自动内置Tomcat容器来运行 Web 应用,我们不需要再去单独做应用部署。
3、Spring Boot 通过扫描约定路径下的 Spring.factories文件来识别配置类,实现 Bean 的自动装配。
4、Spring Boot会默认加载的配置文件 application.properties 等等。
总的来说,约定优于配置是一个比较常见的软件设计思想,它的核心本质都是为了更高效以及更便捷的实现软件系统的开发和维护。

Spring Boot 中自动装配机制的原理

@EnableAutoConfifiguration (开启自动配置) 该注解引入了AutoConfifigurationImportSelector,该类中 的方法会扫描所有存在META-INF/spring.factories的jar包。
自动装配,简单来说就是自动把第三方组件的 Bean 装载到 Spring IOC 器里面,不需要开发人员再去写 Bean 的装配配置。
SpringBoot自动装配主要是基于注解编程 和 约定优于配置的思想来设计的
在 Spring Boot 应用里面,只需要在启动类加上@SpringBootApplication 注解就可以实现自动装配。
@SpringBootApplication 是 一 个 复 合 注 解 , 真 正 实 现 自 动 装 配 的 注 解 是@EnableAutoConfiguration。
自动装配的实现主要依靠三个核心关键技术。引入 Starter 启动依赖组件的时候,这个组件里面必须要包含@Configuration 配置类,在这个配置类里面通过@Bean 注解声明需要装配到 IOC 容器的 Bean 对象。
这个配置类是放在第三方的 jar 包里面,然后通过 SpringBoot 中的约定优于配置思想,把这个配置类的全路径放在 classpath:/META-INF/spring.factories 文件中。这样 SpringBoot 就可以知道第三方 jar 包里面的配置类的位置,这个步骤主要是用到了 Spring 里面的 SpringFactoriesLoader 来完成的。
SpringBoot 拿到所第三方 jar 包里面声明的配置类以后,再通过 Spring 提供的ImportSelector 接口,实现对这些配置类的动态加载。
在我看来,SpringBoot 是约定优于配置这一理念下的产物,所以在很多的地方,都会看到这类的思想。它的出现,让开发人员更加聚焦在了业务代码的编写上,而不需要去关心和业务无关的配置。
其实,自动装配的思想,在 SpringFramework3.x 版本里面的@Enable 注解,就有了实现的雏形。@Enable 注解是模块驱动的意思,我们只需要增加某个@Enable 注解,就自动打开某个功能,而不需要针对这个功能去做 Bean 的配置,@Enable 底层也是帮我们去自动完成这个模块相关 Bean 的注入。以上,就是我对 Spring Boot 自动装配机制的理解。

Spring Boot中的Starter

Starter是Spring Boot的四大核心功能特性之一,除此之外,Spring Boot还有自动装配、Actuator监控等特性。
Spring Boot里面的这些特性,都是为了让开发者在开发基于Spring生态下的企业级应用时,只需要关心业务逻辑,减少对配置和外部环境的依赖。
其中,Starter是启动依赖,它的主要作用有几个。Starter组件以功能为纬度,来维护对应的jar包的版本依赖,
使得开发者可以不需要去关心这些版本冲突这种容易出错的细节。Starter组件会把对应功能的所有jar包依赖全部导入进来,避免了开发者自己去引入依赖带来的麻烦。Starter内部集成了自动装配的机制,也就说在程序中依赖对应的starter组件以后,这个组件自动会集成到Spring生态下,并且对于相关Bean的管理,也是基于自动装配机制来完成。依赖Starter组件后,这个组件对应的功能所需要维护的外部化配置,会自动集成到SpringBoot里面,我们只需要在application.properties文件里面进行维护就行了,比如Redis这个starter,
只需要在application.properties文件里面添加redis的连接信息就可以直接使用了。
在我看来,Starter组件几乎完美的体现了Spring Boot里面约定优于配置的理念。

另外,Spring Boot官方提供了很多的Starter组件,比如Redis、JPA、MongoDB等等。
但是官方并不一定维护了所有中间件的Starter,所以对于不存在的Starter,第三方组件一般会自己去维护一个。官方的starter和第三方的starter组件,最大的区别在于命名上。官方维护的starter的以spring-boot-starter开头的前缀。第三方维护的starter是以spring-boot-starter结尾的后缀这也是一种约定优于配置的体现。

Spring Boot的原理

  1. 封装了Maven常用依赖:能够快速的整合第三方框架
  2. 内置Tomcat(java)
  3. Web组件默认整合SpringMVC框架
  4. 使用注解化方式简化xml spring、springmvc(去除web.xml/xml)

SpringBoot属性注入
● @Value注解
● @ConfigurationPropertes注解

spring和springboot的区别

Spring和Spring Boot是两个相关的Java开发框架,它们之间有以下几点区别:

  1. 依赖管理:Spring是一个轻量级的框架,使用Spring时需要手动配置和管理多个库的版本依赖。而Spring Boot提供了自动化的依赖管理,通过约定大于配置的原则,可以简化项目的开发和配置。
  2. 配置方式:在Spring中,需要通过XML配置文件或Java注解来进行配置。而Spring Boot采用了自动配置的方式,通过约定和默认值,可以减少配置量,并提供了更简洁的配置方式。
  3. 启动方式:Spring应用程序需要自己编写启动类,并手动配置一些基本环境。而Spring Boot提供了一个内嵌的服务器(如Tomcat、Jetty),只需编写一个主应用程序类,即可直接运行Web应用程序。
  4. 条件化配置:Spring Boot引入了条件化配置的特性,可以根据环境、属性或其他条件来自动选择配置。这样可以根据不同的环境,轻松地切换配置,而无需手动修改代码。
  5. 生态系统:Spring拥有广泛的生态系统,包括Spring MVC、Spring Security、Spring Data等模块,提供了完整的企业级应用开发解决方案。Spring Boot建立在Spring基础之上,进一步简化了应用程序的开发和部署,提供了一系列开箱即用的特性,如自动配置、健康检查、监控等。
    总体而言,Spring是一个用于构建企业级Java应用程序的框架,而Spring Boot则是在Spring基础上进一步简化开发和部署的工具。Spring Boot提供了更简单的配置方式、自动化的依赖管理和内嵌服务器等特性,使得开发者可以更快速地创建独立的、生产级别的Spring应用程序。

Spring Boot组件

(1)Auto-configuration:这是Spring Boot的核心特性,通过自动配置机制减少了开发者的配置工作,根据项目的依赖和配置推断出合理的默认配置,并自动应用这些配置。
(2)Starter:Spring Boot提供了一系列起步依赖,它们是预配置的依赖项集合,可以简化项目的依赖管理。起步依赖包含了所需的库、配置和传递依赖,使得开发者只需添加一个依赖,即可获得特定功能的自动配置。
(3)Embedded Servers:Spring Boot支持将Web应用程序打包为可执行的JAR文件,并内置了多个嵌入式服务器如Tomcat、Jetty和Undertow,无需独立部署到外部服务器上。
(4)Actuator:这是Spring Boot的一个附加组件,它提供了对应用程序的监控和管理功能,可以暴露有关应用程序运行状况、健康状态、性能指标等的端点,方便开发者进行监控和管理。
(5)Spring Boot CLI:这是一个命令行工具,可以快速创建和运行Spring Boot应用程序,它提供了一些有用的命令和功能,例如创建项目、运行Groovy脚本、安装插件等。

Spring Boot 启动流程

  1. 通 过 SpringFactoriesLoader加 载 META-INF/spring.factories⽂件,获取并创建
    SpringApplicationRunListener对象
  2. 然后由 SpringApplicationRunListener来发出 starting 消 息
  3. 创建参数,并配置当前 SpringBoot 应⽤将要使⽤的 Environment
  4. 完成之后,依然由 SpringApplicationRunListener来发出 environmentPrepared 消 息
  5. 创 建 ApplicationContext
  6. 初始化 ApplicationContext,并设置 Environment,加载相关配置等
  7. 由 SpringApplicationRunListener来发出 contextPrepared消息,告知SpringBoot 应⽤使⽤的ApplicationContext已准备OK
  8. 将各种 beans 装载⼊ ApplicationContext,继续由 SpringApplicationRunListener来发出 contextLoaded 消息,告知 SpringBoot 应⽤使⽤的 ApplicationContext已装填OK
  9. refresh ApplicationContext,完成IoC容器可⽤的最后⼀步
  10. 由 SpringApplicationRunListener来发出 started 消 息
  11. 完成最终的程序的启动
  12. 由 SpringApplicationRunListener来发出 running 消息,告知程序已运⾏起来了

Spring Boot 启动流程

  1. 加载应用配置:Spring Boot 使用 application.properties 或者 application.yml 文件作为应用的配置文件。在启动时,它会读取这些配置文件并加载应用所需的配置信息。
  2. 创建 Spring 应用上下文:Spring Boot 会创建一个 Spring 应用上下文(ApplicationContext),它是 Spring 框架的核心容器,负责管理各个 Bean 的生命周期和依赖注入等。
  3. 扫描和加载组件:Spring Boot 会扫描指定包及其子包下的组件,例如控制器(Controllers)、服务(Services)、存储库(Repositories)等,并将它们加载到应用上下文中。
  4. 执行自动配置:Spring Boot 的核心特性之一就是自动配置(Auto-configuration)。它根据应用的依赖和配置文件,自动配置各种常用的功能模块,例如数据库连接池、Web MVC、安全认证等。通过自动配置,开发者可以更快速地搭建一个基于Spring Boot 的应用程序。
  5. 启动 Tomcat 容器:如果应用程序是基于 Web 的,Spring Boot 将会启动内嵌的 Tomcat 容器,并将应用程序部署到容器中。Tomcat 是一个常用的 Java Web 服务器,能够处理 HTTP 请求和响应。
  6. 运行应用程序:一旦 Tomcat 容器启动成功,Spring Boot 就会自动运行应用程序,并等待处理客户端的请求。这时,我们就可以通过浏览器或其他客户端工具访问应用程序提供的服务了。
    总的来说,Spring Boot 的启动流程非常简单和高效,它通过自动配置和内嵌容器的方式,大大简化了 Spring 应用程序的开发和部署过程。

Spring Boot 启动流程的源码解析如下:

  1. 加载应用配置:Spring Boot 会在启动时加载 application.properties 或者 application.yml 文件中的配置信息。这个过程通过 PropertySourcesLoader 类实现,它会根据配置文件的名称和位置将配置信息加载到 Environment 对象中。
  2. 创建 Spring 应用上下文:Spring Boot 使用 SpringApplication 类来创建 Spring 应用上下文。它会根据配置信息和类路径上的注解,创建一个适合的应用上下文对象。具体实现是通过调用 SpringApplication 的 run() 方法来完成。
  3. 扫描和加载组件:Spring Boot 使用注解和约定来自动扫描和加载组件。在创建应用上下文时,SpringApplication 类会传入指定的主配置类,然后根据主配置类所在的包,递归扫描该包及其子包下的组件,并将它们注册到应用上下文中。这个过程由 SpringFactoriesLoader 类和 ComponentScanAnnotationParser 类实现。
  4. 执行自动配置:Spring Boot 的自动配置是通过 EnableAutoConfiguration 注解实现的。在创建应用上下文时,SpringApplication 类会扫描 META-INF/spring.factories 文件,找到所有带有 EnableAutoConfiguration 注解的自动配置类,并根据条件判断进行自动配置。自动配置采用了一系列的 @Conditional 注解来决定是否应用某个配置。这个过程由 SpringFactoriesLoader 类和 AutoConfigurationImportSelector 类实现。
  5. 启动 Tomcat 容器:如果应用程序是基于 Web 的,Spring Boot 会启动内嵌的 Tomcat 容器。这个过程是通过 ServletWebServerFactory 接口和具体的实现类(如 TomcatServletWebServerFactory)完成的。ServletWebServerFactory 负责创建和配置内嵌的 Servlet 容器,而 TomcatServletWebServerFactory 是针对 Tomcat 容器的实现。
  6. 运行应用程序:一旦 Tomcat 容器启动成功,Spring Boot 就会自动运行应用程序,并等待处理客户端的请求。这一步主要是由 Tomcat 容器负责。
    以上就是 Spring Boot 启动流程的源码解析概述。这里只是简单介绍了各个步骤的主要实现类和关键代码,实际源码涉及的细节非常丰富,可以通过阅读 Spring Boot 源码来深入理解。

Spring Boot的启动流程主要包括以下几个步骤:

  1. 加载启动类:Spring Boot应用程序的入口是一个主启动类,该类通常使用@SpringBootApplication注解标记。在启动过程中,Java虚拟机(JVM)会加载该类并执行其中的main方法。
  2. 创建Spring容器:在启动类的main方法中,会创建一个Spring应用上下文(ApplicationContext),该上下文是整个Spring应用的核心容器。Spring Boot使用Spring的装配机制,根据配置和注解,将各个组件(如控制器、服务、DAO等)进行实例化,并管理它们的生命周期。
  3. 自动配置:Spring Boot会根据应用程序的类路径、依赖关系和配置信息,自动进行一系列的配置。它通过条件化配置(Conditional Configuration)的机制,根据环境、属性或其他条件,选择合适的配置方式。这样可以大大简化应用程序的配置工作。
  4. 启动内嵌服务器:如果应用程序是一个Web应用程序,Spring Boot会自动启动一个内嵌的Web服务器(如Tomcat、Jetty)。它会根据配置信息和约定,默认监听某个端口,并处理来自客户端的HTTP请求。
  5. 执行应用程序逻辑:一旦Spring Boot应用程序启动完成,它就会根据具体的业务逻辑来处理请求和响应。这通常涉及到控制器层、服务层和数据访问层之间的交互。
  6. 关闭应用程序:当收到关闭信号(如Ctrl+C)或应用程序运行出错时,Spring Boot会执行清理操作,并关闭内嵌服务器和释放资源。此时,整个应用程序的生命周期就结束了。
    需要注意的是,Spring Boot的启动流程可以通过自定义的配置和扩展点进行定制。开发者可以根据特定需求,添加自定义的启动过程、注册额外的组件,或者修改默认的配置和行为。这使得Spring Boot具有很高的灵活性和可扩展性。

SpringBoot可以同时处理多少请求

SpringBoot默认的内嵌容器是Tomcat,也就是我们的程序实际上是运行在Tomcat里的。所以与其说SpringBoot可以处理多少请求,到不如说Tomcat可以处理多少请求。
关于Tomcat的默认配置,都在spring-configuration-metadata.json文件中,对应的配置类则是org.springframework.boot.autoconfigure.web.ServerProperties。
●server.tomcat.threads.min-spare:最少的工作线程数,默认大小是10。该参数相当于长期工,如果并发请求的数量达不到10,就会依次使用这几个线程去处理请求。
●server.tomcat.threads.max:最多的工作线程数,默认大小是200。该参数相当于临时工,如果并发请求的数量在10到200之间,就会使用这些临时工线程进行处理。
●server.tomcat.max-connections:最大连接数,默认大小是8192。表示Tomcat可以处理的最大请求数量,超过8192的请求就会被放入到等待队列。
●server.tomcat.accept-count:等待队列的长度,默认大小是100。

springboot怎么加载配置文件的

寻找加载配置的入口方法
我们从springboot的入口方法(run)一直点进去可以看到一个164行有个叫this.prepareEnvironment的方法,这里是环境配置准备的入口,我们在这个方法的下方debugger住,我们可以看到ConfigurableEnvironment已经加载好了,在框住的红色区域内正是我们配置文件的name和对应的属性
在这里我们记住几个重要的关键信息
environment
propertySources
propertySourcesList

通过运行结果,我们可以得出:application*.properties>
这三种配置文件以 application*.properties 优先级最高,application.properties 和 yml 文件在并存时(同一目录下),application.properties 优先级更好,会先读它,若它没有,再去读yml中的值。
bootstrap.yml 优先于application.yml

  • 15
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

思静语

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值