1、springboot的配置文件
Springboot有一个全局的配置文件,配置文件的名是固定的。
application.properties : key=value
appication.yml: key: 空格 value
配置文件的作用:修改SpringBoor自动配置的默认值。底层探究—>
1.1 yml概述
YAML (YAML Ain't a Markup Language)YAML不是一种标记语言,通常以.yml为后缀的文件,是一种直观的能够被电脑识别的数据序列化格式,并且容易被人类阅读,容易和脚本语言交互的,可以被支持YAML库的不同的编程语言程序导入,一种专门用来写配置文件的语言。可用于如: Java,C/C++, Ruby, Python, Perl, C#, PHP等
-------------------------------约定-----------------------------------------
k: v 表示键值对关系,冒号后面必须有一个空格
使用空格的缩进表示层级关系,空格数目不重要,只要是左对齐的一列数据,都是同一个层级的
大小写敏感
缩进时不允许使用Tab键,只允许使用空格。
松散表示,java中对于驼峰命名法,可用原名或使用-代替驼峰,如java中的lastName属性,在yml中使用lastName或 last-name都可正确映射。
-----------------------------------键值关系-----------------------------------
(以java语言为例,其它语言类似)对于键与值主要是看能否表示以下内容。普通的值(数字、字符串、布尔)、日期、对象、数组、集合等。
比较传统的xml和yml
<server>
<port>8080</port>
</server>
server:
port: 8080
2、注入配置文件
2.1 yaml 注入配置文件
2.1.1 原始的注入值
1、编写一个pojo包下的实体类(简单的)
@Component
public class Student {
@Value("Ryan")
private String name;
private String email;
private String sex;
private Integer age;
.....
}
2、原始通过 @Value 注解给bean注入属性值
@SpringBootTest
class SpringBootymlApplicationTests {
@Autowired
private Student student;
@Test
void contextLoads() {
System.out.println(student);
}
}
3、测试一下
2.1.2 使用yaml的方式注入
1、在springboot项目中resources 目录下新建一个文件application.yml
person:
name: lxx
age: 3
happy: false
birth: 2021/01/01
maps: {k1: v1,k2: v2}
lists:
- code
- girl
- music
student:
name: JJ
2、编写一个pojo包下的实体类(复杂的)
@Component //注册bean到容器中
@ConfigurationProperties(prefix = "person")
public class Person {
private String name;
private Integer age;
private Boolean happy;
private Date birth;
private Map<String, Object> maps;
private List<Object> lists;
private Student student;
}
3、原始通过 @Value 注解给bean注入属性值
@ConfigurationProperties(prefix = "person")
导入一下依赖坐标
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
4、测试一下
@SpringBootTest
class SpringBootymlApplicationTests {
@Autowired
private Person person;
@Test
void contextLoads() {
System.out.println(person);
}
}
解释@ConfigurationProperties:
/*
@ConfigurationProperties 的作用:
(1)将配置文件配置的每一个属性值,映射到这个组件中。
(2)告诉springboot将本列多有的属性和配置文件中相关的配置进行绑定
(3)参数 prefix=“XXX” ;和配置文件中XXX下面的属性一一对应
*/
IDEA 提示,springboot配置注解处理器没有找到,导入一个依赖;
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
2.1.3 加载指定的配置文件
@PropertySource: 加载指定的配置文件@ConfigurationProperties: 默认从全局文件中获取值
测试:
1、在resources目录下新建一个person.properties文件
2、指定代码中加载person.properties文件
name=Austin
3、输出测试:
使用properties配置文件在写中文的时候,会出现中文乱码l
在idea中settings–>FileEncodings 中配置
2.2 比较 @ConfigurationProperties 和 @Value的总结
配置yml和配置properties都可以获取到值 , 强烈推荐 yml;如果我们在某个业务中,只需要获取配置文件中的某个值,可以使用一下 @value;如果说,我们专门编写了一个JavaBean来和配置文件进行一一映射,就直接@configurationProperties,不要犹豫!
2.2.1 松散语法
什么是松散的语法?
1、创建一个实体类
2、配置yml文件
3、测试一下
可以自行测试
2.2.2 JsR303数据校验
如何使用?
Springboot 中可以使用@Validated来校验数据,如果数据异常则会抛出以上,方便异常的统一处理
案例:email 格式:
作用: 使用数据校验,可以确保数据的正确性
@NotNull(message="名字不能为空")
private String userName;
@Max(value=120,message="年龄最大不能查过120")
private int age;
@Email(message="邮箱格式错误")
private String email;
空检查
@Null 验证对象是否为null
@NotNull 验证对象是否不为null, 无法查检长度为0的字符串
@NotBlank 检查约束字符串是不是Null还有被Trim的长度是否大于0,只对字符串,且会去掉前后空格.
@NotEmpty 检查约束元素是否为NULL或者是EMPTY.
Booelan检查
@AssertTrue 验证 Boolean 对象是否为 true
@AssertFalse 验证 Boolean 对象是否为 false
长度检查
@Size(min=, max=) 验证对象(Array,Collection,Map,String)长度是否在给定的范围之内
@Length(min=, max=) string is between min and max included.
日期检查
@Past 验证 Date 和 Calendar 对象是否在当前时间之前
@Future 验证 Date 和 Calendar 对象是否在当前时间之后
@Pattern 验证 String 对象是否符合正则表达式的规则
3、多环境切换
3.1不同环境的配置
profile是Spring对不同环境提供不同的配置功能的支持,可以通过激活不同的环境版本,实现快速切环境。
#启动springBoot,配置环境,使用 debug: true 来查看
spring:
profiles:
active:
例如:
application-test.yml: 代表测试环境的配置
application-dev.yml: 代表开发环境配置
默认是主配置文件:application.yml
3.2配置文件加载的位置
优先级高到底:
项目路径下的config文件夹配置文件-->项目路径下配置文件--->资源路径下的config文件夹配置文件--->资源路径下配置文件
指定位置加载配置文件:
通过spring.config.location来改变默认的配置文件位置