一、什么是Spring Boot
Spring Boot
是目前流行的微服务框架 倡导约定优先于配置
其目的是 用来简化新 Spring 应用的初始化搭建以及开发过程。 SpringBoot 提供了很多核心的功 能,比如自动化配置 starter(启动器) 简化 Maven配置、内嵌 Servlet 容器、应用监控等功能, 让我们可以快速构建企业级应用程序。
- 特性:
- 创建独立的Spring 应用程序
- 嵌入式 Tomcat、 Jetty、 Undertow容器(jar)
- 提供的 starters 简化构建配置(简化依赖管理和版本控制)
- 尽可能自动配置 spring应用和第三方库
- 提供生产指标,例如指标、健壮检查和外部化配置
- 没有代码生成,无需XML配置
SpringBoot 同时提供开箱即用,约定优于配置的特性。
开箱即用
:SpringBoot应用无需从0开始,使用脚手架创建项目。基础配置已经完成。 集成大部分第三方库对象,无需配置就能使用。例如在SpringBoot项目中使用MyBatis。可以直接使用XXXMapper对象, 调用方法执行sql语句。
约定优于配置
:SpringBoot定义了常用类,包的位置和结构,默认的设置。代码不需要做调整,项目能够按照预期运行。比如启动类在根包的路径下,使用了@SpringBooApplication注解。创建了默认的测试类。controller,service,dao 应该放在根包的子包中。application为默认的配置文件。
SpringBoot3 最小 jdk17, 支持 17-22。
二、最新的SpringBoot3 新特性
2022 年 11月 24日。SpringBoot3 发布,里程碑的重大发布。这个版本应该是未来5年的使用主力。Spring官网支持SpringBoot3.0.X 版本到2025年。
- SpringBoot3 中的重大变化:
- JDK最小Java17,能够支持17-22.
- Spring Boot 3.0 已将所有底层依赖项从 JavaEE 迁移到了
JakartaEEAPI
。原来javax开头的包名,修改为jakarta
。 例如 jakarta.servlet.http.HttpServlet 原来 javax.servlet.http.HttpServlet - 支持 GraalVM 原生镜像。将Java应用编译为本机代码,提供显著的内存和启动性能改进
- 对第三方库,更新了版本支持
- 自动配置文件的修改
- 提供新的声明式Http服务,在接口方法上声明@HttpExchange获取http远程访问的能力。代替OpenFeign
- Spring HTTP 客户端提供基于 Micrometer 的可观察性. 跟踪服务,记录服务运行状态等
- AOT(预先编译) 支持AheadOfTime,指运行前编译
- Servlet6.0 规范
- 支持 Jackson 2.14
- Spring MVC :默认情况下使用的 PathPatternParser。删除过时的文件和 FreeMarker 、JSP 支持
伴随着SpringBoot3 的发布,还有 SpringFramework6.0的发布(2022-11-16),先于 Spring Boot 发布。
三、脚手架
脚手架
是一种用在建筑领域的辅助工具,是为了保证建筑施工过程顺利进行而搭设的工作平台。软件工程中的脚手架是用来快速搭建一个小的可用的应用程序的骨架,将开发过程中要用到的工具、环境都配置好,同时生成必要的模板代码。脚手架辅助创建程序的工具,SpringInitializr
是创建SpringBoot项目的脚手架。快速建立 SpringBoot项目的最好方式。他是一个web应用,能够在浏览器中使用。IDEA中继承了此工具,用来快速创建SpringBoot项目以及Spring Cloud 项目。
Spring Initializr
脚手架的 web 地址: https://start.spring.io/
阿里云脚手架
:https://start.aliyun.com/
四、使用脚手架创建项目
4.1 浏览器访问脚手架,创建项目
这里我们以Spring Initializr 脚手架为例。脚手架使用需要联网。
4.2 IDEA 中使用脚手架(推荐)
- 1、New Project
- 2、Spring Initializr
4.3 spring-boot-starter-parent
pom.xml
中的<parent>指定 spring-boot-starter-parent 作为坐标,表示继承 Spring Boot 提供的父项目。从spring-boot-starter-parent 继承以获得合理的默认值和完整的依赖树,以便快速建立一个SpringBoot项目。
父项目提供以下功能:
- JDK的基准版本,比如<java.version>17</java.version>
- 源码使用UTF-8 格式编码
- 公共依赖的版本
- 自动化的资源过滤:默认把src/main/resources目录下的文件进行资源打包
- maven的占位符为‘@’
- 对多个Maven插件做了默认配置,如maven-compile-plugin,maven-jar-plugin
快速创建SpringBoot项目,同时能够使用父项目带来的便利性,可以采用如下两种方式:
- 在项目中,继承spring-boot-starter-parent
- pom.xml 不继承,单独加入spring-boot-dependencies 依赖
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>3.3.1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
五、配置文件基础
5.1 配置文件格式
- 配置文件有两种格式分别:
properies
和yaml(yml)
。properties是Java中的常用的一种配置文件格式,key=value
。key 是唯一的,文件扩展名为properties
。- yaml(YAML Ain’t Markup Language)也看做是 yml,是一种做配置文件的数据格式,基本的语法
key:[空格]值
。yml文件文件扩展名是yaml或yml(常用)。
yml 格式特点:
- YAML基本语法规则:
- 大小写敏感
- 使用缩进表示层级关系
- 缩进只可以使用空格,不允许使用Tab键
- 缩进的空格数目不重要,相同层级的元素左侧对齐即可
#
字符表示注释,只支持单行注释。#放在注释行的第一个字符
YAML缩进必须使用空格
,而且区分大小写,建议编写YAML文件只用小写和空格。
- YAML支持三种数据结构:
- 对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
- 数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)
- 标量(scalars):单个的、不可再分的值,例如数字、字符串、true|false等
需要掌握数据结构完整内容,可从https://yaml.org/type/index.html 获取详细介绍。
5.2 application 文件
Spring Boot 同时支持properties 和 yml 格式的配置文件。 配置文件名称默认是application。我们可以使用
application.properties
,application.yml
。读取配置文件的key值,注入到Bean的属性可用@Value
,@Value一次注入一个key的值。将多个key值绑定到Bean的多个属性要用到@ConfigurationProperties
注解。在代码中访问属性除了注解,Spring提供了外部
化配置的抽象对象Environment
。Environment 包含了几乎所有外部配置文件,环境变量,命令行参数等的所有key和value。需要使用Environment的注入此对象,调用它的getProperty(String key)
方法即可。
- 注意:
- Spring Boot 建议使用一种格式的配置文件,如果properties和yml都存在。properties文件优先。推荐使用yml文件。
- application 配置文件的名称和位置都可以修改。约定名称为application,位置为resources目录。
5.3 application.properties
需求:在application.properties 提供应用程序的 name,owner, port 基本信息,程序读取这些数据,显示给用户。
-
step1:在 application.properties 自定义配置项目
app.name=Lession01 app.age=25 app.port=8001
-
step2: 创建 SomeService 类读取 app.name, app.owner,app.port 配置 key。
注解@Value读取单个值,语法${key:默认值}@Service public class DemoService { //spring提供默认的类型转换 @Value("${app.name}") private String userName; @Value("${app.age}") private Integer age; @Value("${app.port:8080}") <