每日一句:
You can't skip steps
You have to put one foot in front of the other
Things take time
There are no shortcuts
目录
1.YAML基本语法
使用缩进表示层级关系
缩进时不允许使用tab键,只能只用空格
缩进的空格数不限制,只要相同层对齐就好
大小写敏感
2.YAML支持的数据格式
对象:键值对的集合
数组:一组按次序排列的数据类型相同的值
字面量:单个的,不可再分的值(普通的值,比如数字、字符串、布尔之类)
字符串不用加上单引号或双引号
双引号:会转义特殊符号
例如: name : " abc \n def " 输出:abc 有换行效果 def
单引号:不会会转义特殊符号
例如: name : ‘ abc \n def ’ 输出:abc \n def
对象
name:
lastName: 枫
firstName: 冬
行内写法
name: {lastName: 枫,firstName: 冬}
map
map: {k1: v1,k2: v2}
数组(list、set)
list:
- a
- b
- c
行内写法
list:[a,b,c]
3.YAML配置文件值获取
Person类
//把组件加入到容器中
@Component
//告诉springboot 将本类的属性和配置文件中对应的配置进行绑定
//prefix 指定是配置文件中哪个属性下的配置进行绑定
@ConfigurationProperties(prefix = "person")
public class Person {
private String name;
private Integer age;
private String gender;
private List list;
private Map<String,Object> map;
private Dog dog; //关联的Dog类
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public List getList() {
return list;
}
public void setList(List list) {
this.list = list;
}
public Map<String, Object> getMap() {
return map;
}
public void setMap(Map<String, Object> map) {
this.map = map;
}
public Dog getDog() {
return dog;
}
public void setDog(Dog dog) {
this.dog = dog;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
", gender='" + gender + '\'' +
", list=" + list +
", map=" + map +
", dog=" + dog +
'}';
}
}
Dog类
public class Dog {
private String name_dog;
private String gender_dog;
public String getName_dog() {
return name_dog;
}
public void setName_dog(String name_dog) {
this.name_dog = name_dog;
}
public String getGender_dog() {
return gender_dog;
}
public void setGender_dog(String gender_dog) {
this.gender_dog = gender_dog;
}
@Override
public String toString() {
return "Dog{" +
"name_dog='" + name_dog + '\'' +
", gender_dog='" + gender_dog + '\'' +
'}';
}
}
server:
port: 8055
person:
name: Murphy
age: 18
gender: 未知
dog:
name_dog: Winter
gender_dog: 公
list:
- 123
- b
- 456
map: {k1: hi,k2: 你好}
测试类
// SpringBoot单元测试,可以在测试期间很方便的类似编码一样进行自动注入到容器的功能
@RunWith(SpringRunner.class)
@SpringBootTest
class LearnApplicationTests {
@Autowired
private Person person;
@Autowired
ApplicationContext ioc;
@Test
void contextLoads() {
System.out.println(person);
}
}
运行测试类

Perfect !!!

4.properties配置
将上面的yaml删了,打开application.properties配置,没有自己创建
配置application.properties
person.dog.name_dog= Winter
person.dog.gender_dog= 母
person.name = Murphy
person.age= 18
person.gender= 未知
person.list= a,b,c
person.map.k1= 123
person.map.k2= hhh
同样运行测试类

哎呦出现中文乱码,脑壳疼!

勾上这个在运行的时候转换为ascii码
5.@ConfigurationProperties和@Value区别
@value Spring底层注解
类似于:
<bean class="Person">
<property name="name" value="Murphy" ></property>
</bean>
- @ConfigurationProperties能够批量注入配置文件的属性。
@Value只能一个个指定。

- @ConfigurationProperties支持松散绑定。
@ConfigurationProperties(prefix =“person”),只需要指定一个前缀,就能绑定有这个前缀的所有属性值。 - @Value支持SpringEl的语法。@ConfigurationProperties不支持SpringEl的语法。

- @ConfigurationProperties还支持JSR303进行配置文件值及校验。例如:

注意加上@Validated 注解 启动校验
- @Value不支持复杂类型封装注解。
如果说,我们只是在某个业务逻辑中需要获取一下配置文件中的某项值,使用@Value,如果我们专门编写了一个javabean和配置文件进行映射,就直接使用ConfigurationProperties;
比如上面的map属性就不可用@Value
6.@PropertySource、@importResource、@Bean
- @PropertySource(value = “classpath:application.yml”) 指定配置文件
- @ImportResource 导入Spring配置文件(XML文件),让配置文件生效
- @ConfigurationProperties(prefix = “person”) 默认全局配置文件
7.配置文件占位符
可用随机数:
${random.value} ${random.int} ${random.long} ${random.int(10)} ${random.int[1024,65536]}
占位符获取之前配置的值,如果没有可以用冒号指定默认值:
${person.aaa:abc} 没有aaa这个配置就会指定为abc
8.Profile多环境支持
当有多个配置文件时(application-xxx.properties/yml)可以在默认配置中激活使用其他文件

1.在properties为主配置文件时
使用spring.profiles.active: dev 激活dev配置文件
2.在yml为主配置文件时可以使用文档块模式,就不用写很多配置文件:

当指定激活prod时,运行后的端口就会变成prod块里的8022
3.可以用命令行指定参数:
java -jar 包 --spring.profiles.active: dev
9.配置文件加载位置
springboot启动后会默认扫描一下子位置的application.properties/yml 文件作为默认配置文件
– file:./config/
– file:./
– classpath:/config/
– classpath:/
优先级从高到低,全部路径下的配置文件都会被加载,优先级高的配置内容会覆盖优先级低的配置内容,高没有低有的也会被加载(互补配置)
10.外部配置加载顺序
可以查SpringBoot文档:
SpringBoot文档

本文详细介绍了SpringBoot配置文件的使用,包括YAML的基本语法和数据格式,配置文件值的获取,@ConfigurationProperties与@Value的区别,配置文件的占位符,Profile的多环境支持,加载位置以及外部配置的加载顺序。内容涵盖YAML和properties的配置,以及Spring注解的使用。
21万+

被折叠的 条评论
为什么被折叠?



