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

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

application*.yml

application*.yaml

application*.properties

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

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

一般使用application.yml。

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的值就是一个对象。不配置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
@RestControllerpublic classUserController {
@Value("${name}") //使用@Value注入配置文件中的值。${}要加引号
privateString name;
@RequestMapping("/user")publicString 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 classUserController {private intid;privateString name;private intage;private intscore;public void setId(intid) {this.id =id;
}public voidsetName(String name) {this.name =name;
}public void setAge(intage) {this.age =age;
}public void setScore(intscore) {this.score =score;
}
@RequestMapping("/user")publicString handler(){return name; //使用
}
}

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

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

java 如何选中配置文件 java配置文件yml_配置文件

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

org.springframework.boot
spring-boot-configuration-processor
true

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