(学习笔记)SpringBoot2配置文件优先级与取值

配置文件的优先级

​ 对于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即可解决该报红。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值