前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SpringBoot:概述

SpringBoot:概述

作者头像
栗筝i
发布2022-12-09 15:05:43
8020
发布2022-12-09 15:05:43
举报
文章被收录于专栏:迁移内容迁移内容迁移内容

Spring Boot 是 Spring 开源组织下的子项目,是 Spring 组件一站式解决方案,主要是简化了使用 Spring 的难度,简省了繁重的配置,提供了各种启动器,开发者能快速上手。 ~ 本篇内容包括:Spring Boot 概述、Spring Boot 约定优于配置、Spring Boot 演进之路


文章目录


一、Spring Boot 概述

1、Spring Boot 简介

Spring Boot 是 Spring 开源组织下的子项目,是 Spring 组件一站式解决方案,主要是简化了使用 Spring 的难度,简省了繁重的配置,提供了各种启动器,开发者能快速上手。

Spring Boot 操作 MongoDB
Spring Boot 操作 MongoDB

官方网站:http://projects.spring.io/spring-boot/

GitHub源码:https://github.com/spring-projects/spring-boot

2、Spring Boot 特点

为基于 Spring 的开发提供更快的入门体验开箱即用,没有代码生成,也无需 xml 配置。同时也可以修改默认值来满足特定的需求。

提供了一些大型项目中常见的非功能性特性,如嵌入式服务器、安全、指标,健康检测、外部配置等 SpringBoot 不是对 Spring 功能上的增强,而是提供了一种快速使用 Spring 的方式。

3、Spring Boot 优点

Spring Boot 优点如下:

  1. 独立运行:Spring Boot 而且内嵌了各种 Servlet 容器,Tomcat、Jetty等,现在不再需要打成 war 包部署到容器中,Spring Boot 只要打成一个可执行的 jar 包就能独立运行,所有的依赖包都在一个 jar 包内。
  2. 简化部署:spring-boot-starter-web 启动器自动依赖其他组件,简少了 Maven 的配置。
  3. 自动配置:Spring Boot 能根据当前类路径下的类、jar 包来自动配置 bean,如添加一个 ‘spring-boot-starter-web’ 启动器就能拥有 web 的功能,无需其他配置。
  4. 无代码生成及 xml 配置:Spring Boot 配置过程中无代码生成,也无需 xml 配置文件就能完成所有配置工作,这一切都是借助于条件注解完成的,这也是 Spring4.x 的核心功能之一。
  5. 应用监控:Spring Boot 提供一系列端点可以监控服务及应用,做健康检测。
4、Spring Boot 缺点

Spring Boot 缺点如下:

Spring Boot 虽然上手很容易,但如果你不了解其核心技术及流程,所以一旦遇到问题就很棘手,而且现在的解决方案也不是很多,需要一个完善的过程。


二、Spring Boot 约定优于配置

1、对于“约定优于配置”的理解

约定优于配置(convention over configuration),也称作按约定编程,是一种软件设计范式,旨在减少软件开发人员需做出决定的数量,活得简单的好处,而又不失灵活性。开发人员仅仅需要规定应用中不符合约定的部分。

  • 约定大于配置,约定好于配置,习惯大于配置等。但它们都表明了一个意思,并不是说零配置。或者说零配置并不是完全没有配置,而是通过约定来减少配置;
  • 系统,类库,框架应该提供有合理的默认值,而非要求提供不必要的配置。使用该框架提供的默认值,会让开发人员工作起来效率更快。

Ps:Spring 在推动 约定优于配置 这一设计理念,从 Spring 的注解版本就已经开始了。引入注解就是为了减少一些默认配置,引入注解也就代表着简化配置的开始,官方说基于 Spring 的基础就是这个事实。

2、对于“约定优于配置”的体现

在我们真实去使用 Spring Boot 进行开发时,就能深刻体会到其中“约定优于配置”的这一特点。往往是我们引入一个组件依赖,加个配置,这个组件就生效了,非常便利。

比如我们常用的 Redis, 在 Spring Boot 中就是这样使用的:

# 引入 Maven 依赖

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

# 配置 .yml 文件

spring:
  redis:
    host: localhost
    port: 6379
    password: pwd1234

# 使用 Redis

	@Autowired
	private RedisTemplate redisTemplate;

可以看到就这样简单两步,中间没有做任何事情,就可以搞定 Redis 的引入(Ps:关于 Spring Boot 是如何做到这一点的,会在后面介绍)


三、Spring Boot 演进之路

1、Spring Boot 1.0 和 2.0
  • 从 2.0 版本开始 WebMvcConfigurerAdapter 抽象类已经过时。直接继承 WebMvcConfigurer 接口然后实现他的 default 方法即可。因为 SpringBoo t的 2.0 及其以上版本最低支持Java 8,而 Java 8 中有个新特性就是 default 关键字。 WebMvcConfigurerAdapter 可以用 WebMvcConfigurationSupport 替代,但是不推荐使用 WebMvcConfigurationSupport 这个类会全面接管对 SpringMVC 的配置,即SpringBoot 对 SpringMVC 的自动配置全部失效,只使用用户对 SpringMVC的 配置。
  • SpringBoot1.X 配置的拦截器对静态资源是默认放行的,而 SpringBoot 2.X 版本的拦截器不会对静态资源默认放行,也会进行拦截。如果想要使用静态资源就必须排除静态资源的请求路径。
2、Spring Boot 2.1
  • 优化应用程序启动速度,启动时占用的内存更少。在 Spring Data JPA 中设置 spring.data.JPA.repositori.bootstrap.bootstrap-mode=deferred 时,Hibernate 将在单独的线程启动,而应用程序的其余组件将会并行启动。
  • 支持 Java11 并且兼容Java8。
  • 提供了应用程序缓存管理信息和提供Spring集成组件的图表信息。
3、Spring Boot 2.2
  • Spring Boot 2.2.0 的性能获得了很大的提升。现在,应用程序启动速度更快,并且消耗的内存更少。这在具有非常严格的内存约束的环境中特别有用。
  • 现在可以通过 spring.main.lazy-initialization 属性启用全局延迟初始化,以减少启动时间。但是在进行任何延迟的初始化时,HTTP 请求的处理可能需要更长的时间;通常在启动时会发生的故障现在在启动后才会出现。
  • 支持 Java 13,同时仍与 Java 11 和 8 兼容
  • 配置属性现在支持基于构造函数的绑定,该绑定使 @ConfigurationProperties 注释的类不可变。可以通过使用 @ConstructorBinding 注释 @ConfigurationProperties 类或其构造函数之一来启用基于构造函数的绑定。可以在配置属性绑定提供的构造函数参数上使用 @DefaultValue 和 @DateTimeFormat 之类的注释。
4、Spring Boot 2.3

# 正常(优雅)停机

所有四个嵌入式Web服务器(Jetty,Reactor Netty,Tomcat和Undertow)以及响应式和基于Servlet的Web应用程序均支持正常关机。它作为关闭应用程序上下文的一部分发生,并在停止SmartLifecyclebean 的最早阶段执行。此停止处理使用一个超时,该超时提供一个宽限期,在此宽限期内,现有请求将被允许完成,但新请求将不被允许。不允许新请求的确切方式因所使用的Web服务器而异。Jetty,Reactor Netty和Tomcat将停止在网络层接受请求。Undertow将接受请求,但会立即以服务不可用(503)响应进行响应。

当我们流量请求到此接口执行业务逻辑的时候,若服务端此时执行关机 (kill),spring boot 默认情况会直接关闭容器(tomcat 等),导致此业务逻辑执行失败。在一些业务场景下:会出现数据不一致的情况,事务逻辑不会回滚。使用Tomcat正常关机需要Tomcat 9.0.33或更高版本。

# 分成 jar 包

重新打包的 jar 分别在 BOOT-INF/classes 和中包含应用程序的类和依赖项 BOOT-INF/lib。对于需要从 jar 的内容中构建 docker 映像的情况,能够进一步分隔这些目录,以便可以将它们写入不同的层是很有用的。

Buildpacks 打镜像包会使用缓存的,如果这一层没变那就不用重新打这一层,只需要重新打包修改过的层,这样一来,如果你只修改了 application 中的内容,比如新加了 Controller 或者配置文件等,那么只需要重新打包这一层,也就是几 K,几十 K 不会很大,这样一来打包速度就很快了,要不然一个上百兆的镜像包也得需要一段时间。

5、Spring Boot 2.4

# 自动分析瘦身

Spring Boot 项目最终构建处理 JAR 包大小一直是个诟病,需要把所有依赖包内置最终输出可运行的 jar。 当然可以使用其他的插件扩展 实现依赖 JAR 和 可运行 jar 分离可以参考 slot-maven-plugin, 但此种方法治标不治本并不能减少原有依赖的 JAR 的大小。

Spring Boot 2.4 提供对构建输出 JAR 分析自动瘦身的功能,自动在构建输出可运行 JAR 时删除 empty starter dependencies。

6、Spring Boot 3.0

Spring Boot 3 最大的变化是决定使用 Java 17 作为最低版本。要求 Java 17 和更新版本是一个重大举措,Spring 将成为第一个需要此最新 LTS 版本的主要框架。

Spring Boot 3 还需要 Spring Framework 6。对于 Gradle 用户,Spring Boot 3 需要 Gradle 7.3 或更高版本。

其余值得注意的依赖升级可以分为两组,Spring 项目和第三方库。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-12-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、Spring Boot 概述
    • 1、Spring Boot 简介
      • 2、Spring Boot 特点
        • 3、Spring Boot 优点
          • 4、Spring Boot 缺点
          • 二、Spring Boot 约定优于配置
            • 1、对于“约定优于配置”的理解
              • 2、对于“约定优于配置”的体现
              • 三、Spring Boot 演进之路
                • 1、Spring Boot 1.0 和 2.0
                  • 2、Spring Boot 2.1
                    • 3、Spring Boot 2.2
                      • 4、Spring Boot 2.3
                        • 5、Spring Boot 2.4
                            • 6、Spring Boot 3.0
                            相关产品与服务
                            云数据库 Redis
                            腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
                            领券
                            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档