SpringBoot自动启动流程简析
1、SpringApplication应用创建步骤
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
对需要校验的属性指定规则
是Bean Validation的参考实现,提供了JSR 303规范中所有内置constraint的实现,除此之外还有一些附加的constraint
- 在日常开发中,Hibernate Validator经常用来验证bean的字段,基于注解,方便快捷高效
- Valid常用注解
- Hibernate附加约束
- @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”})
-
使用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配置:
#指定不同环境的配置文件
spring:
profiles:
active: dev
配置VM options、Program arguments、Active Profile切换【三者取其一】
- Dspring-profiles.active=prod
- spring.profiles.active=prod
- Active profiles=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