本节目标
- 加载配置文件的优先级
- yaml配置中配置不同类型的数据
配置文件形式
在springboot中配置文件有两种形式:properties、yml。新项目中一般采用yml这种形式。
- properties : 属性文件,key=value形式。
- yml:YAML语言的文件
Springboot默认会使用一个全局的配置文件(文件名是固定的),application.properties或者application.yml。
这个文件在src/main/resources下。当这个目录下既有application.properties还有application.yml时,那么最终配置项就会以 " properties " 为主,从而忽略了 " yml "。
常见配置
在我们开发web项目时,时长会配置web容器的端口号或者上下文路径【context-path】。而还有哪些配置呢?这里我们就可以查看官网。
从服务属性中,可以看到我们能够配置的属性和作用,如下图:
属性配置文件
该方式是传统的一种配置文件方式。采用Key=Value的形式。如下:
server.port=8080
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=123456
yml配置文件
1. 属性配置到yml配置
上面属性文件中配置的内容,采用yml配置。
server:
port: 8080
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/mydb
username: root
password: 123456
属性配置文件中的每一个点都代表这里的一个层级。层级才用缩进代表他们之间的父子关系。基本格式要求:
- 大小写敏感
- 使用缩进代表层级关系
- 注意空格
- 相同的部分只出现一次
2.yml数据类型
-
单个数据
# 单个数据 mykey: 123456// 获得mykey配置内容 @Value("${mykey}") -
对象数据
# 对象数据 user1: id: 123 name: 张三 age: 45 # 或者 user2: {id: 234,name: "李四",age: 34}// 对象配置映射的Bean @Data @Component @ConfigurationProperties(prefix = "user1") public class User { private Integer id; private String name; private Integer age; }// 获得对象数据 @Resource private User user; -
数组
user3: id: 123 name: 张三 age: 45 country: - 中国 - 美国 - 日本 - 加拿大 # 或者 user4: id: 123 name: 张三 age: 45 country: [中国,美国,日本,加拿大]注意:
定义list集合不能用@value注解来获取list集合的所有值,如果使用@value注解会报错
配置文件存放位置优先级
-
项目根目录下的config目录中。 项目A/config目录中(优先级最高)
- 项目A/config/application.properties
- 项目A/config/application.yml
-
项目根目录中(其次)
- 项目A/application.properties
- 项目A/application.yml
-
项目的resources下的config目录中(再次)
- 项目A/resources/config/application.properties
- 项目A/resources/config/application.yml
-
项目的resources中(最后)
- 项目A/resources/application.properties
- 项目A/resources/application.yml
代码地址
gitee.com/mayuanfei/S…下的springboot03
记忆印记
- 不用管什么优先级,直接在resources目录下有一个application.yml即可
- 对象数据通过
@ConfigurationProperties(prefix = "user1")来整型成一个bean - @value注解不能获得集合值,需要包在一个对象里