文章目录
前言
- 为了简化 Spring 应用的创建、运行、调试、部署等
- Spring Boot 提供了一堆依赖打包(starter:将某个场景下面的所有依赖打包成一个依赖),大部分依赖的版本冲突问题得到解决
- 默认使用 tomcat 作为服务器(内嵌 tomcat,无需额外配置),使用 logback 提供日志记录
- 致力于简洁开发,让开发者写更少的配置,让程序能更快的运行和启动
- Spring Cloud 的基础
一、特点
① 为基于 Spring 的开发提供更快的入门体验
② 开箱即用,没有代码生成,也无需 xml 配置。也可以通过修改默认值来满足特定需求
③ 提供一些常见的非功能性特性:如内嵌 tomcat 服务器,安全、外部配置…
④ 不是对 Spring 功能上的增强,而是提供了一种快速使用 Spring 的方式
二、核心功能
起步依赖(简化依赖配置)
本质是一个 maven 项目对象模型
将具备某种功能的依赖打包到一起
,提供一些默认功能
如 web 项目需要导入 spring context、spring-webmvc…等众多依赖,而 Spring Boot 已经将这些打包成一个坐标依赖,只需要导入这个依赖,便可以导入所需的众多依赖。
自动装配(简化工程常用配置)
spring boot 提供了很多配置类,在应用程序启动时,主要根据加载的依赖
,来决定要用哪些配置类
辅助功能
内置 Tomcat 服务器
支持 yml 格式配置文件
…
内置 Tomcat
在 spring-boot-starter-web 起步器(starter)
中,内置了 spring-boot-starter-tomcat 起步器
而在 spring-boot-starter-tomcat 中,配置了一个 tomcat-embed-core 坐标,这个坐标叫做 tomcat 内嵌核心 ,作用是将 tomcat 引入到程序中
运行原理:
tomcat 底层是 java 语言开发,而java 程序运行靠的是对象,所以 tomcat 运行起来也靠对象,即 tomcat 服务器是以对象的形式在 spring 容器中运行
二、POM 文件
Spring Boot 的父模块
一个 Spring Boot 项目的 pom 文件会继承于 Spring Boot 的父模块 spring-boot-starter-parent
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.12.RELEASE</version>
<relativePath/> <!-- 从本地仓库查找 -->
</parent>
spring-boot-starter-parent 又继承于 spring-boot-dependencies 模块
依赖的版本控制
在 spring-boot-dependencies
模块中
Maven 多模块开发
问题
如果使用多模块开发,那么我们自己有一个自己的父模块,此时如果还继承 spring boot 的父模块,便无法继承自己的父模块
解决
首先需要弄清一点,在单模块开发时,我们的 Spring boot 项目最终是需要找到 spring-boot-dependencies 模块,获取里面的依赖版本
以导入的方式,导入 spring-boot-dependencies 模块
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.3.12.RELEASE</version>
<!-- 打包方式 -->
<type>pom</type>
<!-- 导入 -->
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
注意:
spring-boot-dependencies 打包方式是 pom,所以不能直接使用依赖标签< dependency >< /dependency >作为依赖导入
依赖 start
本质是一个 jar 包,将这个 jar 所需要的依赖传递给项目,开发者只需要写某个 start,与这个 start 的相关依赖都会传递给项目
与 parent 区别
start 是一个坐标中定了若干个坐标,即一个依赖中包含多个依赖,只需要写 start 一个依赖,其相关的多个依赖都会传递给项目,减少了依赖配置的书写量。
parent 则是定义了几百个依赖的版本号,依赖的版本由 Spring Boot 统一管理,减少版本冲突
三、配置文件
Spring Boot 的配置文件主要用来配置自动配置类所需要的参数,如数据库四大参数。如果自动配置类有默认参数,那么会被配置文件中的参数替换
分类
properties
server.port=80
yml
server:
port: 81
yaml
server:
port: 81
yml 与 yaml 只是后缀名不同,推荐使用 yml 格式的配置文件(能少一个就少一个字母)
读取
单一
@Value(“${key}”)
注意:
使用@Value注解时,要将该注解写在一个注入到 Spring 容器受其管控的 bean 的属性名上方
这样当bean进行初始化时候才可以读取到对应的数据
全部
当配置文件中定义的数据量过多时,要写多个 @Value ,而 Spring Boot 提供了一个对象 Environment,配置文件中所有的数据保存在这个对象中
Environment
读取数据:environment.getProperty("key")
读取对象形式数据
上述方式要么太繁琐(读取单一数据),要么封装的太厉害(读取全部数据),而且对于对象数组也只能拿到一个数据,SpringBoot也提供了可以将一组yaml对象数据封装一个Java对象的操作,首先定义一个注入到 spring 容器受其管控的 bean ,然后使用@ConfigurationProperties
指定该对象加载哪一组yaml中配置的信息
@ConfigurationProperties
注意
- 封装类的属性需要与配置文件中的配置信息对应
- 封装类必须注入到 spring 容器中,否则无法进行属性注入
此时 IDEA 在该封装类会有一个警告,(可以不管)
这是因为这个封装类是我们自定义的,SpringBoot 没有此封装类的配置元数据
解决
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>