SpringBoot yml文件语法

 

SpringBoot提供了大量的默认配置,如果要修改默认配置,需要在配置文件中修改。

 

SpringBoot默认会加载resource下的配置文件:

  • application*.yml
  • application*.yaml
  • application*.properties

这也是配置文件的加载顺序,如果某个key有多个配置,则后加载的会覆盖之前加载的配置。

yml、yaml是同一种文件,后缀写成yml、yaml都可以。

 

一般使用application.yml。

 

 


 

 

 

springboot在不同的环境下有默认的加载文件:

  • application  开发、测试、生产都会加载,公共的
  • application-dev  只在开发环境加载(调试src/main)
  • application-test  只在测试环境加载(调试src/test)
  • application-prod  只在生产环境加载(正式打包部署)

 

 


 

 

yml文件语法

(1)普通字段:

name: zhangsan

值不加引号

 

 

(2)对象、Map

对象、Map的配置方式是一样的。

student: #对象名、Map名
  id: 1  #配置一个属性、一个键值对
  name: chy
  age: 20
  score: 100

 

值可以是对象:

server:
  port: 8080
  servlet:
    context-path: /springboot

servlet的值就是一个对象。不配置端口,默认为8080;不配置context-path,默认为/

 

 

(3)数组、List

city: [beijing,shanghai,guangzhou,shenzhen]
student: [{name: zhangsan,age: 20},{name: lisi,age: 20}]  #元素可以是对象

 

 

值,不管是key的值,还是数组元素,都不加引号。

key、value冒号分隔,冒号后面都要加一个空格,加了空格后key会变成橙色,才有效。

 

 

 


 

 

 

使用yml中的值

如果是springboot预定义的key,springboot会自动使用它。如果是自定义的key,就需要我们自己来引用。有2种引用方式。

 

(1)使用@Value

name: chy
@RestController
public class UserController {
    @Value("${name}") //使用@Value注入配置文件中的值。${}要加引号
    private String name;

    @RequestMapping("/user")
    public String handler(){
        return name; //使用
    }

}

 

不能直接${ }、"${ }"来使用配置文件中的值。

需要借助成员变量,使用@Value注入配置文件中的值,通过成员变量来引用。

 

不管成员变量是什么数据类型,${ }都需要加引号,会自动转换为需要的类型,注入。

 

对象、Map,通过.来注入单个字段, @Value("${student.name}")

数组、List,通过下标来注入单个元素,@Value("${city[0]}")

只能注入基本类型,不能直接直接注入整个对象、Map、数组、List。

 

 

 

(2)使用@ConfigurationProperties注入对象、Map

使用@Value依次注入对象、Map的字段时,student.id,student.name,student.age,都有相同的前缀student,也可以这样来注入:

@RestController
@ConfigurationProperties(prefix = "student") //设置前缀
public class UserController {
    private int id;
    private String name;
    private int age;
    private int score;

    public void setId(int id) {
        this.id = id;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public void setScore(int score) {
        this.score = score;
    }

    @RequestMapping("/user")
    public String handler(){
        return name; //使用
    }

}

 

设置前缀、设置对应的成员变量、并提供对应的setter方法,会自动注入该字段的值。

 

运行,效果正常,但IDEA提示:

 

其实没啥影响,当然也可以在pom.xml中添加:

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>

这样写完@ConfigurationProperties后,在yml中配置该前缀(对象)时,会有字段提示,比如打一个student.,会有预选项id、name、age、score。

 

posted @ 2020-02-09 12:58  chy_18883701161  阅读(3633)  评论(0编辑  收藏  举报