配置文件的优先级
对于springboot,提供了三种配置文件对其配置进行操作,官方推荐yaml,不过默认创建的是properties,在优先级中,
properties > yml > yaml
yaml的基本语法
- 大小写敏感。
- 数据值前面必须有空格,作为分隔符。
- 使用缩进表示层级关系。
- 缩进时不允许使用tab键(idea的tab除外)只允许使用空格键(每个操作系统的空格数目可能不同,导致层次混乱。)
- 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可。
- #表示注释。
yaml语法:
#对象的两种写法。
person:
name: zhangsan
age: 18
person2: {name: zhangsan, age: 18 }
#数组的两种写法
hobby:
- chang
- tiao
- rap
- lanqiu
hobby2: [chang,tiao,rap,lanqiu]
#纯量
msg1 : 'hello \n world!' #不会识别传义字符\n,原样输出
msg2 : "hello \n world!" #识别转义字符。
yaml的参数引用
name: abc
person:
name: ${name}
age: 18
读取配置的内容
SpringBoot中可使用三种方式去读取我们编写的配置文件的配置,
@Value
Environment
@ConfigurationProperties
接下来分别演示三种不同方法的读取。
@Value
首先编写一个HelloController,对于配置文件的取值,可以使用${}去取到相对应的值。对于值较少得配置来说可以直接是用这种方法来取。
@RestController
public class HelloController {
//获取对象的 name
@Value("${person.name}")
private String name;
//取数组的值,
@Value("${hobby[0]}")
private String hobby;
// 取纯量的值
@Value("${msg1}")
private String msg;
@RequestMapping("/hello")
public String hello() {
return "hello spring boot2!" + "\n" + name + "\n" + hobby + "\n" + msg;
}
}
Environment
对于这种方法的取值,我们只需要往容器注入**org.springframework.core.env.Environment;**即可进行使用,相比较于@Value的取值,该方法取值只需要通过getProperty(“配置文件的键”)即可获取,少了${}该格式。
@Autowired
private Environment env;
// 第二种通过Environment来取值
@RequestMapping("/world")
public String world() {
String env_name = env.getProperty("person.name");
String env_msg1 = env.getProperty("msg2");
return "world!"+"\n"+env_name+"\n"+env_msg1;
}
相比较于value取值,该方法取值可理解为注入容器,要啥取啥,而@Value则是缺啥拿啥,两种方法都各有各的好处,酌情使用。
@ConfigurationProperties
上面两种方法获取对象的值时,我们都需要一个一个的去获取,但是通过**@ConfigurationProperties**方法来获取,我们只需要在bean创建一个person实体类,然后在其面前赋值指定配置文件的键即可。
@Data
@AllArgsConstructor
@NoArgsConstructor
//以上为lombok插件
@ConfigurationProperties(prefix = "person")
public class Person {
private String name;
private Integer age;
}
我们的配置指定了前缀为person的配置,即
name: abc
#对象的两种写法。
person:
name: ${name}
age: 18
该配置里面的值。
遇到的错误。
在实体类上添加@ConfigurationProperties(prefix = “person”)时会出现上面的红色提示,其实这个也不算报错,但是也有解决的办法,我们点Open Documentation…,在springboot2.4.4中会404错误,我们只需要把版本降到2.1.8.RELEASE即可查看该文档。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
```![在这里插入图片描述](https://img-blog.csdnimg.cn/20210409130416633.png)
将该依赖粘贴到我们的pom.xml即可解决该报红。