springboot的yaml注入
配置文件的作用:修改springbooot自动配置的默认值,因为spring boot在底层都给我们自动配置好了;
例子:修改启动端口
server:
prot: 8081
1、yaml语法
- 空格不能省略
- 以缩进来控制层级关系,只要是左对齐的一列数据都是同一个层级的。
- 属性的值和大小写都是十分敏感的
字面量:普通的值【数字,布尔值,字符串】
字面量直接写在后面就可以,字符串默认也不用加上双引号或单引号;
注意:
-
“” 双引号
例如:name:“kanren \n kanxin” 输出:kanren 换行 kanxin
-
''单引号
例如:name:‘kanren \n kanxin’ 输出:kanren \n kanxin
对象、Map<key,value>
person:
name: 寒笑
age: 22
行内写法
person: {name: 含笑,age: 22}
k:
v1:
v2:
数组(List、set)
pets:
- cat
- dog
- pig
行内写法
pets: [cat,dog,pig]
2、yaml注入配置文件
-
在springboot项目中的resource目录下新建一个文件application.yml
-
编写一个实体类Dog
package com.hanxiao.springboot.pojo; @Component //注册bean到容器中 public class Dog { private String name; private Integer age; //有参无参构造、get、set方法、toString()方法 }
-
原来给bean注入属性值:@Value(“”)
@Component //注册bean public class Dog { @Value("阿黄") private String name; @Value("18") private Integer age; }
-
在SpringBoot的测试类下注入狗狗输出一下
@SpringBootTest class DemoApplicationTests { @Autowired //将狗狗自动注入进来 Dog dog; @Test public void contextLoads() { System.out.println(dog); //打印看下狗狗对象 } }
结果成功输出,@Value注入成功,这是我们原来的办法对吧。
-
编写一个person类
@Component //注册bean到容器中 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 Dog dog; //有参无参构造、get、set方法、toString()方法 }
-
使用yaml配置进行注入
person: name: hanxiao age: 22 happy: false birth: 2000/01/01 maps: {k1: v1,k2: v2} lists: - code - girl - music dog: name: 旺财 age: 1
-
在application.properties中注入
/* @ConfigurationProperties作用: 将配置文件中配置的每一个属性的值,映射到这个组件中; 告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定 参数 prefix = “person” : 将配置文件中的person下面的所有属性一一对应 */ @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 Dog dog; }
-
此时,还需要导入一依赖
<!-- 导入配置文件处理器,配置文件进行绑定就会有提示,需要重启 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency>
-
到测试类中测试
@SpringBootTest class DemoApplicationTests { @Autowired Person person; //将person自动注入进来 @Test public void contextLoads() { System.out.println(person); //打印person信息 } }
加载指定配置文件
@PropertySource:加载指定配置文件
-
在resource目录下新建一个person.properties文件
name=hanxiao
-
指定加载person.properties文件
@PropertySource(value = "classpath:person.properties") @Component //注册bean public class Person { @Value("${name}") private String name; ...... }