目录
六.使用@ConfigurationProperties读取
https://docs.spring.io/spring-boot/docs/2.7.0-M1/reference/htmlsingle/#application-properties.server 可以查找配置文件如何覆盖SpringBoot 项目的默认配置。
server.port=8888
- server:
- port: 8888
数据名 : 值
name :[空格] Tom
语法:
对象:
属性名1 :[空格] 属性值属性名2 :[空格] 属性值# 或者对象 :[空格]{ 属性名 1 :[空格] 属性值 , 属性名 2 :[空格] 属性值 }
示例代码:
# 学生 1student1 :sex : femaleage : 10address : beijing# 学生 2student2 : { sex : female , age : 10 , address : beijing }
语法
集合 :-[空格] 值1-[空格] 值2# 或者集合 :[空格][ 值 1 , 值 2 ]
示例:
#自定义配置集合数据 #城市 city1: - beijing - tianjin - shanghai - chongqing city2: [beijing,tianjin,shanghai,chongqing] #元素是对象的集合 students: - name: Jack age: 18 score: 100 - name: Sam age: 28 score: 88 - name: li age: 27 score: 90
注意:值与之前的 - 之间存在一个空格
使用@Value读取
@Value 只能映射简单数据类型,不能将 yaml 文件中的对象、集合映射到属性中。
在controller包下创建一个YmlController1类
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.stereotype.Controller;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.ResponseBody;
-
- @Controller
- public class YmlController1 {
- @Value("${name}")
- private String name;
-
- @Value("${student1.age}")
- private int age;
-
- @Value("${city1[0]}")
- private String city1;
-
- //students集合中的第一个元素的score属性
- @Value("${students[0].score}")
- private double score1;
-
- @RequestMapping("/yml1")
- @ResponseBody
- public String yml1(){
- System.out.println(name);
- System.out.println(age);
- System.out.println(city1);
- System.out.println(score1);
- return "hello springboot!";
- }
- }
控制台输出:
- Tom
- 10
- beijing
- 100.0
- user:
- id: 10086
- username: July
- address:
- - beijing
- - tianjin
- - shanghai
- - chongqing
- grades:
- - subject: math
- score: 100
- - subject: English
- score: 90
- public class Grade {
- private String subject;
- private double score;
-
- //省略get/set/toString方法
- }
- import com.first.domain.Grade;
- import org.springframework.boot.context.properties.ConfigurationProperties;
- import org.springframework.stereotype.Controller;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.ResponseBody;
-
- import java.util.List;
-
- @Controller
- @ConfigurationProperties(prefix = "user")
- public class YmlController2 {
- private int id;
- private String username;
- private List
address; - private List
grades; -
- @RequestMapping("/yml2")
- @ResponseBody
- public String yml2(){
- System.out.println(id);
- System.out.println(username);
- System.out.println(address);
- System.out.println(grades);
- return "hello springboot!";
- }
-
- //省略get/set/toString方法
- }
启动项目,访问localhost:8888/yml2
控制台输出:
- 10086
- July
- [beijing, tianjin, shanghai, chongqing]
- [Grade{subject='math', score=100.0}, Grade{subject='English', score=90.0}]
- server:
- port: 8888
- myconfig:
- myport: ${server.port}
- @Controller
- public class YmlController3 {
- @Value("${myconfig.myport}")
- private int port;
- @RequestMapping("/yml3")
- @ResponseBody
- public String yml3(){
- System.out.println(port);
- return "hello springboot!";
- }
- }
使用框架提供的方法
- # 随机生成tomcat端口(端口号是1024-9999范围以内的数)
- server:
- port: ${random.int(1024,9999)}
项目根目录下(即直接右键项目新建)的 /config 子目录中
- config/application.properties (优先级第一)
- config/application.yml(优先级第二)
项目根目录下
- application.properties(优先级第三)
- application.yml(优先级第四)
项目的 resources 下的 /config 子目录中
- resources/config/application.properties(优先级第五)
- resources/config/application.yml(优先级第六)
项目的 resources 目录中(最常用)
- resources/application.properties(优先级第七)
- resources/application.yml(优先级第八)
优先级高的文件会覆盖优先级低的文件中的配置