yaml学习
为什么要用yaml
SpringBoot默认使用两种配置文件 :
- application.properties
- application.yaml
yaml的优势
它是一种以数据为中心的标记语言,比 XML 和 JSON 更适合作为配置文件
语法
- 使用缩进表示层级关系。
- 缩进时不允许使用 Tab 键,只允许使用空格。
- 缩进的空格数不重要,但同级元素必须左侧对齐。
- 大小写敏感。
常用类型写法
username : zhangsan
password : 123456
字符串
字符串是不用引号的
但是也是可以使用的,其中单引号和双引号有不同的用途
单引号字符串
特殊字符按原来形式输出,即转义
username: 'zhangsan \n lisi'
输出:
zhangsan \n lisi
双引号字符串
特殊字符不转义
username: "zhangsan \n lisi"
输出:
zhangsan
lisi
yaml对象
1.普通写法(推荐)
user :
username : zhangsan
password : 123456
2.行内写法
user : { username : zhangsan , password : 123456 }
yaml数组
1.普通写法(推荐)
username :
- zhangsan
- lisi
2. 行内写法
username : [ zhangsan ,lisi ]
yaml多文档结构
使用—(三个 - )进行文档之间的分割
---
webuser:
username : zhansan
password :123456
---
admin:
username : lisi
password : 456789
yaml嵌套
其实yaml的嵌套和多数我们使用过的嵌套像json文件都是一样的思想
user :
username : zhangsan
password : 123456
habits :
- drink
- run
- play video game
IDEA中创建yaml文件
新建里是找不到的,直接新建带后缀名的.yaml就行
实例使用(必看)
实例目录
导入依赖pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.2</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>day2</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>day2</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- 用于对@ConfigurationProperties注解进行在yaml中提示-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<version>2.6.2</version>
</dependency>
<!-- 用于省去写get和set方法toString方法-->
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.22</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
主要使用的到新增的
用于对@ConfigurationProperties注解进行在yaml中提示
<!-- 用于对@ConfigurationProperties注解进行在yaml中提示-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<version>2.6.2</version>
</dependency>
用于省去写get和set方法toString方法
<!-- 用于省去写get和set方法toString方法-->
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.22</version>
<scope>provided</scope>
</dependency>
创建实体类User
package com.example.day2.entity;
import lombok.Data;
import lombok.ToString;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.Map;
/**
* 加载yaml配置文件
* 使用@ConfigurationProperties注解
* 注解中需要有prefix = " XXX "
* 来帮助Spring Boot对yaml需要加载的配置进行定位(映射)
* 并且必须要将类注册为容器中的组件,才能用@ConfigurationProperties注解功能
*/
@Component
@ConfigurationProperties(prefix = "user")
@Data
@ToString
public class User {
private String userId;
private String username;
private String password;
private int age;
private double height;
private double weight;
private boolean status;
private Map<String,Object> address;
private List<Object> habits;
private UserAuthorities userAuthorities;
}
UserAuthorities辅助类
package com.example.day2.entity;
import lombok.Data;
import lombok.ToString;
@Data
@ToString
public class UserAuthorities {
private int userLevel;
private String authority;
}
Controller类
package com.example.day2.controller;
import com.example.day2.entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ControllerTest {
@Autowired
User user1;
@RequestMapping("/")
public User user(){
return user1;
}
}
yaml中的数据
user:
userId: 001
username: zhangsan
password: 123456
age: 18
height: 175.25
weight: 110.667
status: true
address:
city: shanghai
area: qingpu
habits:
- play video game
- music
- run
userAuthorities:
userLevel: 2
authority: 购物7折
最后启动执行类访问本机端口
成功拿到数据
注解解释
1.@Component
实例化组件
并且必须要将类注册为容器中的组件,才能用@ConfigurationProperties注解功能
所以和@ConfigurationProperties连用
2. @ConfigurationProperties
加载yaml配置文件
使用@ConfigurationProperties注解
注解中需要有prefix = " XXX "
来帮助Spring Boot对yaml需要加载的配置进行定位(映射)
在pom.xml中导入如下依赖
<!-- 用于对@ConfigurationProperties注解进行在yaml中提示-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<version>2.6.2</version>
</dependency>
3.@Data和@ToString
本注解来源于lombok,用于简化代码,省去开发人员书写get(),set(),toString()方法进行自动生成,提高开发效率
其中包含@ToString注解,用于自动生成toString方法
- @Setter自动添加类中所有属性相关的 set 方法
- @Getter自动添加类中所有属性相关的 get 方法
- @Builder使得该类可以通过 builder (建造者模式)构建对象
- @RequiredArgsConstructor生成一个该类的构造方法,禁止无参构造
- @ToString重写该类的toString()方法
- @EqualsAndHashCode重写该类的equals()和hashCode()方法
- @NoArgsConstructor无参构造器
- @AllArgsConstructor全参构造器
- @Data则涵盖所有
需要添加如下依赖再pom.xml中
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.22</version>
<scope>provided</scope>
</dependency>
注意点:使用@Data后无法重写toString所以 才需要再用@ToString来进行重写
4.@Autowired
自动装配
可以对成员变量、方法和构造函数进行标注,来完成自动装配的工作