配置属性
- SpringBoot配置文件加载优先级
- application.properties(最高) > application.yml > application.yaml (最低)
- 不同配置文件中相同配置按照加载优先级相互覆盖,不同配置文件中的不同配置会全部保留
- 常用配置文件种类
- application.yml
指定SpringBoot配置文件
- Setting -> Project Structure -> Facets
- 选中对应项目/工程
- Customize SpringBoot
- 选择配置文件
yaml配置文件书写格式
yaml
- YAML(YAML Ain’t Markup Language),一种数据序列化格式
- 优点:
- 容易阅读
- 容易与脚本语言交互
- 以数据为核心,重数据轻格式
- YAML文件扩展名
- .yml(主流)
- .yaml
yaml语法规则
基本语法:
- key: value -> value 前面一定要有空格
- 大小写敏感
- 属性层级关系使用多行描述,每行结尾使用冒号结束
- 使用缩进表示层级关系,同层级左侧对齐,只允许使用空格(不允许使用Tab键)
- 属性值前面添加空格(属性名与属性值之间使用冒号+空格作为分隔)
表示注释
核心规则:数据前面要加空格与冒号隔开
boolean: TRUE #TRUE,true,True,FALSE,false , False 均可 float: 3.14 #6.8523015e+5 # 支持科学计数法 int: 123 #0b1010_0111_0100_1010_1110 # 支持二进制、八进制、十六进制
null: ~ # 使用 ~ 表示 null
string: HelloWorld # 字符串可以直接书写 string2: “Hello World” # 可以使用双引号包裹特殊字符 date: 2018-02-17 # 日期必须使用 yyyy-MM-dd 格式 datetime: 2018-02-17T15:02:31+08:00 # 时间和日期之间使用 T 连接,最后使用 + 代表时区
- 数组表示方式:在属性名书写位置的下方使用减号作为数据开始符号,每行书写一个数据,减号与数据间空格分隔
```yaml
subject:
- Java
- 前端
- 大数据
enterprise:
name: zhangsan
age: 16
subject2:
- Java
- 前端
- 大数据
likes: [王者荣耀,刺激战场] # 数组书写缩略格式
users: # 对象数组格式
- name: Tom
age: 4
- name: Jerry
age: 5
users2: # 对象数组格式二
-
name: Tom
age: 4
-
name: Jerry
age: 5
# 对象数组缩略格式
users3: [ { name:Tom , age:4 } , { name:Jerry , age:5 } ]
读取yaml单一属性数据
- 使用@Value读取单个数据,属性名引用方式:${一级属性名.二级属性名……}
小结:
- 使用@Value配合SpEL(Spring EL表达式,即${…})读取单个数据
- 如果数据存在多层级,依次书写层级名称即可
yaml文件中的变量引用
- 在配置文件中可以使用属性名引用方式引用属性
- 属性值中如果出现转移字符,需要使用双引号包裹
小结:
- 在配置文件中可以使用${属性名}方式引用属性值
- 如果属性中出现特殊字符,可以使用双引号包裹起来作为字符解析
读取yaml全部属性数据
- 封装全部数据到Environment对象
- 注意 要导这个 包
- import org.springframework.core.env.Environment; ```java //使用自动装配将所有数据封装到一个对象Environment中 @Autowired private Environment env;
@GetMapping public String getById(){ System.out.println(“NBA====>”+nba); System.out.println(“name1====>”+name1); System.out.println(“like1====>”+like1); System.out.println(“age1====>”+age1); System.out.println(“tempDir====>”+tempDir);
System.out.println("---------------------------");
System.out.println(env.getProperty("user1.name"));
System.out.println(env.getProperty("users[1].age"));
System.out.println("SpringBoot is running2...");
return "SpringBoot is running2...";
}
<a name="TqYyY"></a>
# 读取yaml引用类型属性数据
- 自定义对象封装指定数据

1. 提供数据
1. 提供用来封装数据的模型类,这个模型类用来封装yaml文件中的某一部分数据。这个模型类用@ConfigurationProperties注解来与数据产生关联,@ConfigurationProperties(prefix="...")中的prefix属性用来指定是哪一部分数据被封装。再添加@Component注解将该数模型类定义为可以被Spring管控的bean。到这里,数据封装工作就可以交给Spring了。
1. 用@Autowired注解来实现自动装配,讲数据填充到对象中。
```java
# 创建类,用于封装下面的数据
# 由spring帮我们去加载数据到对象中,一定要告诉spring加载这组信息
# 使用时候从spring中直接获取信息使用
datasource:
driver: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost/springboot_db
username: root
password: root666123
//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;
//省略get/set/tostring 方法
}
使用自动装配封装指定数据
@Autowired
private MyDataSource myDataSource;
System.out.println(myDataSource);
小结:
- 使用@ConfigurationProperties注解绑定配置信息到封装类中
- 封装类需要定义为Spring管理的bean,否则无法进行属性注入