SpringBoot学习-02-yaml配置注入
配置文件
SpringBoot使用一个全局的配置文件 , 配置文件名称是固定的
-
application.properties
-
语法结构 :key=value
-
-
application.yml
-
语法结构 :key:空格 value
-
-
-
value
-
yaml概述:
YAML是 "YAML Ain't a Markup Language" (YAML不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:"Yet Another Markup Language"(仍是一种标记语言)
yaml基础语法:
1、空格不能省略
2、以缩进来控制层级关系,只要是左边对齐的一列数据都是同一个层级的。
3、属性和值的大小写都是十分敏感的。
server: port: 8081 # 普通的key-value name: fish # 对象 student: name: fish age: 24 # 行内写法 student1: {name: fish,age: 24} # 数组 pets: - cat - dog - pig # 行内写法 pets:[cat,dog,pig]
yaml注入配置文件
1、在springboot项目中的resources目录下新建一个文件 application.yaml
2、编写一个实体类 Dog
@Component @Data @AllArgsConstructor @NoArgsConstructor public class Dog { @Value("旺财") private String name; @Value("3") private Integer age; }
3、编写一个Person 类
@ConfigurationProperties(prefix = "person") @Component @Data @AllArgsConstructor @NoArgsConstructor 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; }
4、使用yaml配置的方式进行注入,编写一个yaml配置!
person: name: Fish age: 24 happy: true birth: 1998/05/21 maps: {k1: v1,k2: v2} lists: [code,music,basketball] dog: name: 只只 age: 3
5、刚才已经把person这个对象的所有值都写好了,我们现在来注入到我们的类中!
/* @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; }
6、导入配置处理器
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency>
7、在测试类测试:
@SpringBootTest class Springboot02ConfigApplicationTests { @Autowired private Person person; @Test void contextLoads() { System.out.println(person); } }
8、所有值全部注入成功
yaml配置注入属性值和@value注入属性值的区别:
@ConfigurationProperties | @Value | |
---|---|---|
功能 | 批量注入配置文件中的属性 | 单独分开指定 |
松散绑定 | 支持 | 不支持 |
SpEL | 不支持 | 支持 |
JSR303数据校验 | 支持 | 不支持 |
复杂类型封装 | 支持 | 不支持 |
1、@ConfigurationProperties只需要写一次即可 , @Value则需要每个字段都添加
2、松散绑定:这个什么意思呢? 比如我的yml中写的last-name,这个和lastName是一样的, - 后面跟着的字母默认是大写的。这就是松散绑定。可以测试一下
3、JSR303数据校验 , 这个就是我们可以在字段是增加一层过滤器验证 , 可以保证数据的合法性
4、复杂类型封装,yml中可以封装对象 , 使用value就不支持