SpringBoot自动启动流程简析

1、SpringApplication应用创建步骤

  • image.png

    2、SpringFactoriesLoader

  • META/spring.factories文件获取工厂类接口中的实现类,初始化并保存在缓存中,供SpringBoot启动过程中的各个阶段调用

    3、反射机制

    bean自动装配原理

    1、EnableAutoConfiguration:全局自动配置

  • SpringFactoriesLoad会以@EnableAutoConfiguration的包名和类名org.springframework.boot.autocpnfigure.EnanbleAutoConfiguration为Key查找spring.factories文件,并将Value中的类名实例化到Spring Boot应用中

  • spring.factories文件中的每一行都是自动装配类

    详解YAML语法及占位符语法

  • YAML 全称是 ”YAML Ain’t a Markup Language” 的递归缩写

  • 一种数据序列化语言,用一定的格式代表数据结构
  • 格式清晰,表现力强,常用于配置文件

    YAML配置绑定变量两种方式

  • 绑定单个属性

    • @Value绑定单个属性
    • 用@Component注解标注需要被Spring容器托管的bean
  • 绑定所有属性
    • 顶部标签的类添加注解:@ConfigurationProperties(_prefix = “family”)_ | | @ConfigurationProperties | @Value | | —- | —- | —- | | 功能 | 批量注入属性到Java类 | 一个个属性指定注入 | | 松散语法绑定 | 支持 | 不支持 | | 复杂数据类型(对象、数组) | 支持 | 不支持 | | JSR303数据校验 | 支持 | 不支持 | | SpEL | 不支持 | 支持 |

配置属性值数据绑定校验

1、怎么做属性值的校验

  • 在需要校验的属性装配类加@Validated
  • 对需要校验的属性指定规则

    • hibernate-validator

      2、Hibernate Validator

  • 是Bean Validation的参考实现,提供了JSR 303规范中所有内置constraint的实现,除此之外还有一些附加的constraint

  • 在日常开发中,Hibernate Validator经常用来验证bean的字段,基于注解,方便快捷高效
  • Valid常用注解
    • image.png
  • Hibernate附加约束
    • image.png
    • @NotNull:对象不能为空
    • @NotEmpty:字符串、数组不能为空
    • @NotBlank:字符串trim()之后长度不能为0
  • HTTP请求的校验,需要在Controller类头部加上@Validated注解

    3、yaml配置属性随机值占位符语法

  • ${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范围内的数

    加载额外配置文件的两种方式

    1、使用@PropertySource加载自定义的properties文件

  • resources目录新建family.properties

2、使用注解Spring的xml配置文件

  • 编写Bean类
  • resources新建beans.xml通过setter注入或者构造方法注入给属性传值
  • 在启动主类加注解,用来读取Spring xml配置文件@ImportResource(locations={“classpath:beans.xml”})
  • 测试Spring环境中是否有指定名称bean,做断言

    使用SqEL表达式绑定配置项

  • Spring Expression Language(SpEL)是一种功能非常强大的表达式语言,可用于在运行时查询和操作对象。SpEL书写XML配置文件或者Annotation注解上,在Spring Bean的创建过程中生效

  • SqEL网址:https://docs.spring.io/spring/docs/4.3.10.RELEASE/spring-framework-reference/html/expressions.html

    profile不同环境使用不同配置

    1、配置文件规划

  • 减少配置修改次数

  • 方便环境的配置切换

    2、切换环境的方式

  • 准备工作:为不同的环境配置不同的配置文件

    • application.yml
    • application-dev.yml
    • application-test.yml
    • application-prod.tml
  • application配置:

    1. #指定不同环境的配置文件
    2. spring:
    3. profiles:
    4. active: dev
  • 配置VM options、Program arguments、Active Profile切换【三者取其一】

    • Dspring-profiles.active=prod
    • spring.profiles.active=prod
    • Active profiles=prod
  • 命令行方式

    • java -jar boot-config-0.0.1-SNAPSHOT.jar —spring.pofiles.active=prod

      配置及配置文件的加载优先级

  • classpath:/

  • classpath:/config/
  • /
  • /config/
  • file路径优先级高于classpath
  • 带上config比不加优先级高
  • 当前的项目路径 config 目录下的优先级更高
  • 自定义配置文件(项目打包,启动时通过命令行参数来指定配置文件的位置)
    • java -jar ./boot/-launch-1.0.jar —spring.config.location=/User/mqxu/Desktop/application.yml
  • 命令打包
    • mvn packgae -Dmaven.test.skip=true
    • 跳过测试打包
  • pom配置
    • true