配置属性

  • SpringBoot配置文件加载优先级
    • application.properties(最高) > application.yml > application.yaml (最低)
  • 不同配置文件中相同配置按照加载优先级相互覆盖,不同配置文件中的不同配置会全部保留
  • 常用配置文件种类
    • application.yml

指定SpringBoot配置文件

  • Setting -> Project Structure -> Facets
  • 选中对应项目/工程
  • Customize SpringBoot
  • 选择配置文件

yaml配置文件书写格式

yaml

  • YAML(YAML Ain’t Markup Language),一种数据序列化格式
  1. 优点:
    • 容易阅读
    • 容易与脚本语言交互
    • 以数据为核心,重数据轻格式
  2. YAML文件扩展名
    • .yml(主流
    • .yaml

yaml语法规则

基本语法:

  • key: value -> value 前面一定要有空格
  • 大小写敏感
  • 属性层级关系使用多行描述,每行结尾使用冒号结束
  • 使用缩进表示层级关系,同层级左侧对齐,只允许使用空格(不允许使用Tab键)
  • 属性值前面添加空格(属性名与属性值之间使用冒号+空格作为分隔)
  • 表示注释

核心规则数据前面要加空格与冒号隔开

  • 字面值表示方法 ```yaml

    字面值表示方式

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 连接,最后使用 + 代表时区

  1. - 数组表示方式:在属性名书写位置的下方使用减号作为数据开始符号,每行书写一个数据,减号与数据间空格分隔
  2. ```yaml
  3. subject:
  4. - Java
  5. - 前端
  6. - 大数据
  7. enterprise:
  8. name: zhangsan
  9. age: 16
  10. subject2:
  11. - Java
  12. - 前端
  13. - 大数据
  14. likes: [王者荣耀,刺激战场] # 数组书写缩略格式
  15. users: # 对象数组格式
  16. - name: Tom
  17. age: 4
  18. - name: Jerry
  19. age: 5
  20. users2: # 对象数组格式二
  21. -
  22. name: Tom
  23. age: 4
  24. -
  25. name: Jerry
  26. age: 5
  27. # 对象数组缩略格式
  28. users3: [ { name:Tom , age:4 } , { name:Jerry , age:5 } ]

读取yaml单一属性数据

  • 使用@Value读取单个数据,属性名引用方式:${一级属性名.二级属性名……}

image.png
小结:

  1. 使用@Value配合SpEL(Spring EL表达式,即${…})读取单个数据
  2. 如果数据存在多层级,依次书写层级名称即可

yaml文件中的变量引用

  • 在配置文件中可以使用属性名引用方式引用属性

image.png

  • 属性值中如果出现转移字符,需要使用双引号包裹

image.png
小结:

  1. 在配置文件中可以使用${属性名}方式引用属性值
  2. 如果属性中出现特殊字符,可以使用双引号包裹起来作为字符解析

读取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);

  1. System.out.println("---------------------------");
  2. System.out.println(env.getProperty("user1.name"));
  3. System.out.println(env.getProperty("users[1].age"));
  4. System.out.println("SpringBoot is running2...");
  5. return "SpringBoot is running2...";

}

  1. <a name="TqYyY"></a>
  2. # 读取yaml引用类型属性数据
  3. - 自定义对象封装指定数据
  4. ![image.png](https://cdn.nlark.com/yuque/0/2022/png/1620671/1651246539867-5c61a3f0-8735-45c8-bf2b-8f1777e91c0c.png#clientId=u84f924cc-2ac7-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=274&id=u38b60c12&margin=%5Bobject%20Object%5D&name=image.png&originHeight=548&originWidth=1279&originalType=binary&ratio=1&rotation=0&showTitle=false&size=269019&status=done&style=none&taskId=u345cc060-c5e7-48f6-8505-379c9b0b71b&title=&width=639.5)
  5. 1. 提供数据
  6. 1. 提供用来封装数据的模型类,这个模型类用来封装yaml文件中的某一部分数据。这个模型类用@ConfigurationProperties注解来与数据产生关联,@ConfigurationProperties(prefix="...")中的prefix属性用来指定是哪一部分数据被封装。再添加@Component注解将该数模型类定义为可以被Spring管控的bean。到这里,数据封装工作就可以交给Spring了。
  7. 1. 用@Autowired注解来实现自动装配,讲数据填充到对象中。
  8. ```java
  9. # 创建类,用于封装下面的数据
  10. # 由spring帮我们去加载数据到对象中,一定要告诉spring加载这组信息
  11. # 使用时候从spring中直接获取信息使用
  12. datasource:
  13. driver: com.mysql.jdbc.Driver
  14. url: jdbc:mysql://localhost/springboot_db
  15. username: root
  16. password: root666123
  1. //1.定义数据模型封装yaml文件中对应的数据
  2. //2.定义为spring管控的bean
  3. @Component
  4. //3.指定加载的数据
  5. @ConfigurationProperties(prefix = "datasource")
  6. public class MyDataSource {
  7. private String driver;
  8. private String url;
  9. private String username;
  10. private String password;
  11. //省略get/set/tostring 方法
  12. }

使用自动装配封装指定数据

  1. @Autowired
  2. private MyDataSource myDataSource;
  3. System.out.println(myDataSource);

小结:

  1. 使用@ConfigurationProperties注解绑定配置信息到封装类中
  2. 封装类需要定义为Spring管理的bean,否则无法进行属性注入