SpringBoot:概述

news2024/11/15 13:00:41

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

本篇内容包括:Spring Boot 概述、Spring Boot 约定优于配置、Spring Boot 演进之路


文章目录

    • 一、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


一、Spring Boot 概述

1、Spring Boot 简介

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

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 项目和第三方库。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/71329.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[选型] 实时数仓之技术选型

数仓技术路线选型 对于已有的hive数据仓&#xff0c;怎样改造成实时数仓的要求呢&#xff1f; 2.关于实时数仓的选型 如果选择hbase&#xff0c;建议选择kudu 如果选择kudu, 还可以选择doris 如果选择doris&#xff0c;建议选择iceberg 以上三种选择&#xff0c;要配合具体…

C++实现身份证号码过滤与排序

1.描述 警察办案里检索到一批(n个)身份证号码&#xff0c;希望按出生日期对它们进行从大到小排序&#xff0c;如果有相同日期&#xff0c;则按身份证号码大小进行排序&#xff0c;如果是错误的身份证号&#xff0c;则从排序列表中删除(仅需判断前两位省级地区编码是否在下面的…

知识图谱-KGE-语义匹配-双线性模型-2016:NAM

【paper】 Probabilistic Reasoning via Deep Learning: Neural Association Models【简介】 本文是中科大和科大讯飞联合发表在 IJCAI 2016 上的工作&#xff0c;本文提出了 NAM&#xff08;Neural Association Model&#xff09;用于概率推理&#xff0c;并具体化为 DNN&…

十二月7号

一、uboot概念 1.1 uboot和bootloader关系 1.bootloader:是一系列引导加载程序的统称 boot:引导 loader&#xff1a;加载 2.uboot是引导加载程序中的一种 1.2 uboot特点 1.uboot是由德国DNEX小组进行维护的 2.uboot是一个开源分布式系统 3.uboot支持多种硬件架构平台(ARM/X8…

Blazor 部署 pdf.js 不能正确显示中文资源解决办法

原文链接 [https://www.cnblogs.com/densen2014/p/16964858.html] 在Blazor项目嵌入 pdf.js 时不能正确显示中文,浏览器F12显示如下错误 错误 l10n.js /web/locale/locale.properties not found. 我找到了解决方案。它不仅消除了上面提到的错误&#xff08;即 404 - locale.p…

nextjs13 webpack5 使用wasm报错

问题描述&#xff1a; 在next 13, webpack 5, react 18的项目中使用Rust编写的wasm报错&#xff1a; ./node_modules/image-map-path/image_map_path_bg.wasm Module parse failed: Unexpected character (1:0) The module seem to be a WebAssembly module, but module is n…

freemarker

文章目录创建项目引入依赖创建配置文件创建启动类和测试类语法listMapif运算符处理空值使用??指定缺失变量默认值内建函数集合长度数据类型布尔值时间类型数值类型字符串类型sequence序列类型hash类型常见指令assign自定义变量指令json转成对象实例list通过下标取值map取值通…

「Redis数据结构」集合对象(Set)

「Redis数据结构」集合对象&#xff08;Set&#xff09; 文章目录「Redis数据结构」集合对象&#xff08;Set&#xff09;一、概述二、结构三、编码转换四、小结一、概述 Set是Redis中的单列集合&#xff0c;其特点为不保证有序性、保证元素唯一、可以求交集、并集、差集。 从…

Python入门自学进阶-Web框架——28、DjangoAdmin项目应用-只读字段与后端表单验证

有时候&#xff0c;记录的某些字段在生成后就不允许再修改了&#xff0c;这时前端只能显示&#xff0c;不能修改。这时&#xff0c;可在AdminClass中进行设置&#xff1a;readonly_fields[字段名&#xff0c;字段名&#xff0c;。。。]&#xff0c;前端格式就显示成只显示不能修…

联想电脑怎么录屏?这3个方法,轻松解决

录屏是现在最常见的办公功能之一&#xff0c;最近有朋友问联想电脑怎么录屏。联想电脑是使用Windows系统的。如果想用联想电脑录屏&#xff0c;可以使用Windows系统自带了的录屏软件进行录屏。下面小编将详细的介绍3个方法&#xff0c;解决联想电脑怎么录屏的问题&#xff0c;感…

8086寻址方式图解

目录 1&#xff1a;立即寻址 2&#xff1a;寄存器寻址 3&#xff1a;直接寻址&#xff08;存储器直接寻址&#xff09; 4&#xff1a;寄存器间接寻址&#xff08;重点&#xff09; 5&#xff1a;基址寻址&#xff08;相对寻址&#xff09; 6&#xff1a;变址寻址 &#x…

后端程序员必备的Linux基础知识+常见命令(2023年最新版教程)

文章目录[1. 从认识操作系统开始](https://link.juejin.cn?targethttps%3A%2F%2Fsnailclimb.gitee.io%2Fjavaguide%2F%23%2Fdocs%2Foperating-system%2Flinux%3Fid%3D_1-%E4%BB%8E%E8%AE%A4%E8%AF%86%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%E5%BC%80%E5%A7%8B)[1.1. 操作系统简…

【与达梦同行】数据库coredump的配置方式与截断测试

一、简述 Core的意思是内存, Dump的意思是扔出来, 堆出来.开发和使用Unix程序时, 有时程序莫名其妙的down了, 却没有任何的提示(有时候会提示core dumped). 这时候可以查看一下有没有形如core.进程号的文件生成。在国产操作系统麒麟V10中运维的时候&#xff0c;经常遇见一个问…

一、OpenAI ChatGPT 注册使用

文章目录注册购买openai的官网问题今天早上在sheep公众号里面看到了关于openai 旗下研发的chatgpt的产品&#xff0c;去到chatgpt的网页&#xff0c;我们可以看到他的标语。ChatGPT: Optimizing Language Models for Dialogue 哈哈&#xff0c;我百度了一下&#xff0c;大概意…

文教资料杂志文教资料杂志社文教资料编辑部2022年第17期目录

语言文学研《文教资料》投稿&#xff1a;cn7kantougao163.com 从MRC认知模型看《释大》中的同源关系 苏楚然; 1-4 徐志摩《再别康桥》英译本对比分析——基于许渊冲诗译的“三美论” 牟逸飞;梁楚涵; 5-9 严歌苓小说“笑”书写的语言修辞学视角分析 孙婷婷; 10-12 …

得物云原生全链路追踪Trace2.0-采集篇

一、0xcc开篇 2020年3月&#xff0c;得物技术团队在三个月的时间内完成了整个交易体系的重构&#xff0c;交付了五彩石项目&#xff0c;业务系统也进入了微服务时代。系统服务拆分之后&#xff0c;虽然每个服务都会有不同的团队各司其职&#xff0c;但服务之间的依赖也变得复杂…

学1个月爬虫就月赚6000?别被骗了,老师傅告诉你爬虫的真实情况!

用爬虫赚外快的事情我也干了很多年&#xff0c;爬虫自然不在话下。 那么今天我来说说5个深入一点的爬虫问题&#xff0c;让你清楚爬虫的真实情况&#xff1a; 1.现在的爬虫接单真能1个月赚6000的快外&#xff1f; 2.初级爬虫只能接一些小单&#xff0c;怎样才算初级爬虫水平&…

Kafka ui 搭建以及使用

Kafka ui 序 kafka 本身没有自带相关的 ui 界面&#xff0c;但是很多时候没有页面意味着只有使用命令行进行相关操作如创建 topic、更改 topic 信息、重置 offset 等等。但实际使用中这种效果很差劲&#xff0c;我们一般还是会借助其他软件&#xff0c;实现对 kafka 的页面管…

windows服务器搭建原神私服教程(附客户端+服务端+环境配置)

今天给大家带来的是windows服务器搭建原神私服的教程&#xff0c;服务端搭建于私人windows服务器&#xff0c;客户端支持情况&#xff1a;PC、iOS支持国服 /国际服均可&#xff0c;Android仅支持国际服。本篇文章附有客户端和服务端环境配置文件&#xff0c;请大家按需下载使用…

MobileNet v1神经网络剖析

本文参考: MobileNet网络_-断言-的博客-CSDN博客_mobile-ne Conv2d中的groups参数&#xff08;分组卷积&#xff09;怎么理解&#xff1f; 【分组卷积可以减少参数量、且不容易过拟合&#xff08;类似正则化&#xff09;】_马鹏森的博客-CSDN博客_conv groups Pytorch Mobil…