目录
属性配置
3种配置文件类型
配置文件加载优先级
属性提示消失解决方案
yaml数据格式
语法规则
读取yaml单一属性数据
yaml文件中的变量引用
读取yaml全部属性数据
读取yaml引用类型属性数据
SpringBoot默认配置文件application.properties
eg:
更多属性配置在官网查询,注意用什么技术开什么配置。不用就不要配置
SpringBoot内置属性查询:官方文档中参考文档第一项: Application Properties
docs.spring.iohttps://docs.spring.io/spring-boot/docs/current/reference/html/application-propertier.html#application-properties
1.properties ( 传统格式/默认格式) 2.yml (主流格式) 3.yaml
当多种配置文件出现的时候,他们之间的属性共存叠加并相互覆盖,也就是说如果有相互重叠的属性,他们加载优先级覆盖问题,如果是不相同的属性就全部留下来了。
属性提示是idea提供的功能,并不是boot提供的功能,当使用yaml文件不提供属性提示的时候,idea会认为yaml不是一个属性文件,那么此时就需要让idea将yaml文件认定为一个属性文件。
user:
name: zqf
age: 20
a
#4层
a:
b:
c:
d: 123
#数组
likes:
- game
- music
- sleep
#缩略版
likes2: [game,music,sleep]
#对象数组
users:
-
name: zahngsan
age: 20
-
name: lisi
age: 19
#缩略版
users3: [{name: zhangsan, age: 18}, {name: lisi,age: 17}]
使用@Value读取单个数据,属性名引用方式: ${一级属性名.二级属性....}
//Rest模式
@RestController
@RequestMapping("/books")
public class BookController {
//读取yaml单一数据
@Value("${country}")
private String country;
@Value("${user1.name}")
private String name;
@Value("${likes[1]}")
private String likes1;
@Value("users[1].age")
private String age1;
@GetMapping
public String getById(){
System.out.println("springboot is running...");
System.out.println("country===>"+country);
System.out.println("name===>"+name);
System.out.println("likes1===>"+likes1);
return "springboot is running...";
}
}
在配置文件中可以使用${属性名}方式引用属性值,如果属性中出现特殊字符,可以使用双引号包裹起来作为字符解析,在yml中是支持转义字符的,但是需要用引号包成字符串。
使用Environment对象封装全部配置信息,使用自动装配将所有的数据封装到一 个对象Environment中。
@Autowired
private Environment env;
@GetMapping
public String getById(){
System.out.println(env.getProperty("country")); //china
System.out.println(env.getProperty("users3[1].age")); //17
System.out.println(env.getProperty("temDir")); //c:\window\temp
return "springboot is running...";
}
创建类,用于封装下面的数据
Spring帮我们去加载数据到对象中,一定要告诉Spring加载这组信息
使用时候Spring中直接获取信息使用
yml:
MyDataSource定义数据封装模型封装yaml文件中对应数据
package com.itheima;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
//1.定义数据模型封装yamL文件中对应的数据
//2.定义为spring管控的bean
@Component
//3.指定加载的数据
@ConfigurationProperties(prefix = "datasource")
public class MyDataSource {
private String driver;
private String url;
private String username;
private String password;
@Override
public String toString() {
return "MyDataSource{" +
"driver='" + driver + '\'' +
", url='" + url + '\'' +
", username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
public String getDriver() {
return driver;
}
public void setDriver(String driver) {
this.driver = driver;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
我们要想做到封装局部数据,首先得在yml中提供数据,就是对象格式的这种数据,然后提供一个用来封装的模型类,那么这个类就是用来封装我们定义的数据中的某一部分的,记得一定是某一部分,而这个模型类怎么和他相关联呢?通过一个注解ConfigurationProperties指定他封装的是哪一组数据,把它的前缀告诉他就ok了,当然这个可以不写,默认value和在prefix出现中功能相同。
yml数据是在springboot的环境下读取的,而模型类必须得手spring的管控数据才能封装,因此他必须定义为spring的bean,所以要挂上@Component注解。