1.application.properties
springboot简化了我们很多开发,一些基本的配置不需要再去xml文件中配置,只要在springboot的默认配置文件中配置即可。
比如:
端口号
tomcat内嵌在springboot中,我们无法直接修改tomcat的端口号,没有配置文件。
springboot提供了一个全局配置文件application.properties,我们只要在全局配置文件中写入server.port=8081,即可更改端口号。
日志
通过配置logging.level.root=error可以只查看出错的日志
2.*.yml(主流)和*.yaml文件
这两种配置文件的用法相同,都可以去配置springboot
比如:
端口号
server:
port: 8081
3.优先级
当properties、yaml、yml文件同时存在时,哪一个文件的优先级高呢?
当配置属性冲突时,配置文件的优先级为 properties>yml>yaml
不同配置会全部保留,冲突的会互相覆盖
4.属性提示
当同时存在yaml和yml文件时候,此时idea不认为这两种文件是配置文件,因此在写代码的时候并不会提示我们,下面是解决方案。
选择项目结构
点击工件点击自定义配置
点击加号,选中yaml和yml文件,点击确定
成功识别
5.yaml语法规则
- 大小写敏感
- 属性层级关系使用多行描述,每行结尾使用冒号结束
- 使用缩进表示层级关系,同层级左侧对齐,只允许使用空格(不允许使用Tab键)
- 属性值前面添加空格(属性名与属性值之间使用冒号+空格作为分隔)
- #表示注释
- 多个数据使用-加空格表示或者使用[]形式,多个对象可以使用[jason数据格式书写]
6.读取yml信息
读取单个信息
在yml文件中写入一个信息,name: 张三
@RestController
@RequestMapping("/test")
public class TestController {
@Value("${name}")
private String name;
@GetMapping
public String getName(){
System.out.println(name);
return "zhangsan";
}
}
运行项目,访问url,成功打印到控制台中
读取数组
yml文件
sum:
- run
- pass
- tabe
- call
- pu
@RestController
@RequestMapping("/test")
public class TestController {
@Value("${sum[2]}")
private String bk;
@GetMapping
public String getName(){
System.out.println(bk);
return "zhangsan";
}
}
运行项目,访问url,成功打印到控制台中
7.配置文件数据引用
1.获取指定数据
一个班级有多个学生,都要写成班级名加姓名的格式,我们每个名字前面手写班级名可以实现,但是当班级信息发生变化时,数据改起来会很麻烦。
yml配置信息
class: 五班
Name: ${class}张三
获取yml文件信息
@Value("${Name}")
private String bk;
@GetMapping
public String getName(){
System.out.println(bk);
return "zhangsan";
}
访问页面,数据成功显示
2.使用Environment对象可以获取所有的配置文件值
//使用自动装配,将所有数据封装到一个对象中
@Autowired
private Environment evniroment;
@GetMapping
public String getName(){
System.out.println(evniroment.getProperty("Name"));
return "zhangsan";
}
成功打印到控制台中
3.自动装配
我们一般很少需要获取配置文件中的所有信息,只要获取指定对象的配置信息即可。但是前面中每个值一一对应又太麻烦了,于是又有一种新的方法。
比如我们只想给Person类配置信息
Person:
id: 1
name: 张三
sex: 男
std: 123456789
定义一个java实体类,来接收yml文件中的信息。
这里的@Component就是将该类声明有spring管理
@ConfigurationProperties(prefix = "person")指的是获取前缀为person的配置信息,这里的prefix可以省略。注意,这里的属性名需要与yml中的属性名以一对应,否则会匹配不成功。
@Component
@Data
@ConfigurationProperties(prefix = "person")
public class Person {
private int id;
private String name;
private String std;
private String sex;
}
获取系统中的Person信息并打印
@Autowired
private Person person;
@GetMapping
public String getName(){
System.out.println(person);
return "zhangsan";
}
成功获取