SpringBoot

简介

Spring Boot 是一个框架,一种全新的编程规范,他的产生简化了框架的使用,所谓简化是指简化了 Spring 众多框架中所需的大量且繁琐的配置文件,所以 Spring Boot 是一个服 务于框架的框架,服务范围是简化配置文件。所以从本质上来说,Spring Boot 其实就是 Spring 框架的另一种表现形式

特征

  • 使用 Spring Boot 可以创建独立的 Spring 应用程序
  • 在Spring Boot中直接嵌入了Tomcat、Jetty、Undertow等Web容器,所以在使用SpringBoot 做 Web 开发时不需要部署 WAR 文件
  • 通过提供自己的启动器(Starter)依赖,简化项目构建配置
  • 尽量的自动配置 Spring 和第三方库
  • 提供了生产就绪特征,如:度量指标,运行状况检查和外部化配置
  • 绝对没有代码生成,也不需要 XML 配置文件

SpringBoot项目结构

继承

Spring Boot 的父级依赖,只有继承它项目才是 Spring Boot 项目。
spring-boot-starter-parent 是一个特殊的 starter,它用来提供相关的 Maven 默认依赖。使用它之后,常用的包依赖可以省去 version 标签

<parent> 
	<groupId>org.springframework.boot</groupId> 
	<artifactId>spring-boot-starter-parent</artifactId> <version>2.2.0.RELEASE</version> 
	<relativePath/> <!-- 从仓库查找 -->
 </parent>

依赖

启动器依赖

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

插件

spring-boot-maven-plugin 插件是将 springboot 的应用程序打包成 jar 包的插件。将所有 应用启动运行所需要的 jar 包都包含进来,从逻辑上将具备了独立运行的条件。当运行"mvn package"进行打包后,使用"java -jar"命令就可以直接运行

<build> 
	<plugins> 
		<plugin> 
			<groupId>org.springframework.boot</groupId> 
			<artifactId>spring-boot-maven-plugin</artifactId> 
		</plugin>
	 </plugins> 
</build>

启动类

Spring Boot 的启动类的作用是启动 Spring Boot 项目,是基于 Main 方法来运行的。 注意:启动类在启动时会做注解扫描(@Controller、@Service、@Repository…),扫描 位置为同包或者子包下的注解,所以启动类的位置应放于包的根下

@SpringBootApplication 
public class SpringBootDemoApplication { 
	public static void main(String[] args){
		SpringApplication.run(SpringBootDemoApplication.class,args);
	}
 }

启动器

Spring Boot 将所有的功能场景都抽取出来,做成一个个的 starter(启动器),只需要在项 目里面引入这些 starter 相关场景的所有依赖都会导入进来,要用什么功能就导入什么场景, 在 jar 包管理上非常方便,最终实现一站式开发

启动类与启动器的区别:启动类表示项目的启动入口,启动器表示jar包的坐标

配置文件

Spring Boot 提供一个名称为 application 的全局配置文件,支持两种格式 properteis 格式 与 YAML 格式

Properities

配置tomcat监听窗口
application.properties

server.port=8888

YAML

YAML 格式配置文件的扩展名可以是 yaml 或者 yml
格式要求:

  • 大小写敏感
  • 使用缩进代表层级关系
  • 相同的部分出现一次
    配置tomcat监听窗口
server:
	port: 8888

配置文件存放位置

  • 当前项目根目录中
  • 当前项目根目录下的一个/config子目录中
  • 项目的resource即classpath根路径中
  • 项目的resource即classpath根路径下的/config目录中

不同格式的加载顺序

如 果 同 一 个 目 录 下 , 有 application.yml 也 有 application.properties , 默 认 先 读 取 application.properties

如果同一个配置属性,在多个配置文件都配置了,默认使用第 1 个读取到的,后面读取 的不覆盖前面读取到的

不同位置的加载顺序

  1. 当前项目根目录下的/config子目录中(最高优先级)
  2. 当前项目根目录中(其次)
  3. 项目的resource即classpath根路径下的config目录中(一般)
  4. 项目的resource即classpath根路径中(最后)

配置文件中的占位符

占位符语法

${}

占位符作用

  • "${}"中可以获取框架提供的方法中的值如:random.int 等
  • 占位符可以获取配置文件中的键的值作为另一个键的值

生成随机数

• {random.value} :类似 uuid 的随机数,没有"-"连接
• {random.int} : 随机取整型范围内的一个值 ${random.long} - 随机取长整型范围内的一个值
• {random.long(100,200)} : 随机生成长整型 100-200 范围内的一个值 $、
• {random.uuid} : 生成一个 uuid,有短杠连接
• {random.int(10)} : 随机生成一个 10 以内的数
• {random.int(100,200)} :随机生成一个 100-200 范围以内的数

bootstrap

Spring Boot 中有两种上下文对象,一种是 bootstrap, 另外一种是 application, bootstrap 是应用程序的父上下文,也就是说 bootstrap 加载优先于 applicaton。bootstrap 主要用于从 额外的资源来加载配置信息,还可以在本地外部配置文件中解密属性。这两个上下文共用一 个环境,它是任何 Spring 应用程序的外部属性的来源。bootstrap 里面的属性会优先加载, 它们默认也不能被本地相同配置覆盖

配置文件特征

  • bootstrap由父ApplicationContext加载,比application优先级更高
  • bootstrap里面的属性不能被覆盖

应用场景

application配置文件主要用于SpringBoot的自动化配置
bootstrap:

  • 使用Spring Cloud Config配置中心时,这时需要在bootstrap配置文件中添加连接到配置中心的配置属性来加载外部配置中心的配置信息
  • 一些固定的、不能被覆盖的属性
  • 一些加密/解密的场景