• Spring Boot中配置文件介绍及其使用教程


    目录

    一、配置文件介绍

    二、配置简单数据

    三、配置对象数据

    四、配置集合数据

    五、读取配置文件数据

    六、占位符的使用


    一、配置文件介绍

    SpringBoot项目中,大部分配置都有默认值,但如果想替换默认配置的话,就可以使用application.properties或者application.yml或者application.yaml进行配置。SpringBoot默认会从resources目录下加载application.properties或application.yml文件。其中,application.properties文件是键值对类型的文件,之前一直在使用,所以我们不再对properties文件进行阐述。

    如果我们想要查找配置文件如何覆盖SpringBoot项目的默认配置,那么可以查看下面链接:

    Spring Boot Reference Documentationicon-default.png?t=N7T8https://docs.spring.io/spring-boot/docs/2.7.6/reference/htmlsingle/#appendix.application-properties.server 除了properties文件外,SpringBoot还支持YAML文件进行配置。YAML文件的扩展名为 .yml 或 .yaml ,它的基本要求如下:

    • 大小写敏感
    • 使用缩进代表层级关系
    • 相同的部分只出现一次

    比如使用properties文件配置tomcat端口:

    server.port=8888 

     而使用YAML文件配置tomcat端口:

    server:
            port: 8888

    二、配置简单数据

    除了覆盖默认配置,我们还可以在YAML文件中配置其他信息以便我们在项目中使用。配置简单数据的方式如下:

    语法:

    数据名: 值

    示例: 

    name: LYL

    注意:value之前有一个空格 

    三、配置对象数据

    语法:

    对象:
            属性名1: 属性值
            属性名2: 属性值
    # 或者
    对象: {属性名1: 属性值,属性名2: 属性值}

    示例:

    student:
      age: 10
      female: male
      address: Guangzhou
    # 学生2
    student2: {sex: male,age: 10,address: Guangzhou}

    注意:属性名前面的空格个数不限,在yml语法中,相同缩进代表同一个级别,只要每个属性前的空格数一样即可。 

    四、配置集合数据

    语法:

    集合:
            - 值1
            - 值2
    # 或者
    集合: [值1,值2]

    示例:

    city1:
      - Beijing
      - Shanghai
      - Shenzhen
      - Guangzhou

    # 集合中元素是对象

    students:
      - score: 100
        name: zhangsan
        age: 10
      - score: 95
        name: lisi
        age: 25
      - score: 78
        name: wangwu
        age: 15

    user:
      id: 1001
      username: LYL
      address:
        - Beijing
        - Shanghai
        - Guangzhou
        - Shenzhen
      grades:
        - subject: math
          score: 90
        - subject: english
          score: 39

    五、读取配置文件数据

    我们可以通过@Value注解将配置文件中的值映射到一个Spring管理的Bean的字段上,用法如下:

    yml文件如下:

    1. name: zhangsan
    2. student:
    3. age: 10
    4. female: male
    5. address: Guangzhou
    6. city1:
    7. - Beijing
    8. - Shanghai
    9. - Shenzhen
    10. - Guangzhou
    11. students:
    12. - score: 100
    13. name: zhangsan
    14. age: 10
    15. - score: 95
    16. name: lisi
    17. age: 25
    18. - score: 78
    19. name: wangwu
    20. age: 15
    21. user:
    22. id: 1001
    23. username: LYL
    24. address:
    25. - Beijing
    26. - Shanghai
    27. - Guangzhou
    28. - Shenzhen
    29. grades:
    30. - subject: math
    31. score: 90
    32. - subject: english
    33. score: 39

    读取配置文件:

    1. package com.example.demo.controller;
    2. import org.springframework.beans.factory.annotation.Value;
    3. import org.springframework.stereotype.Controller;
    4. import org.springframework.web.bind.annotation.RequestMapping;
    5. import org.springframework.web.bind.annotation.ResponseBody;
    6. @Controller
    7. public class YmlController1 {
    8. @Value("${name}")
    9. private String name;
    10. @Value("${students[1].name}")
    11. private String stu_name;
    12. @Value("${city1[3]}")
    13. private String address;
    14. @RequestMapping("/yml1")
    15. @ResponseBody
    16. public String yml1(){
    17. System.out.println(name);
    18. System.out.println(stu_name);
    19. System.out.println(address);
    20. return name+" "+stu_name+" "+address;
    21. }
    22. }

     接下来我们运行一下看看能否获得数据:

    OK,控制台和网页端都是可以成功读取数据的。

    不过要注意的是:@Value只能映射简单数据类型,不能将yaml文件中的对象、集合映射到属性中。

    那我们应该如何映射到实体类呢,通过 @ConfigurationProperties(prefifix="对象") 可以将配置文件中的配置自动与实体进行映射,这样可以将yml文件中配置的对象属性直接映射到Bean当中。

    OK,我们来新建一个实体类:Grade,因为User属性中含有该对象:

    1. package com.example.demo.pojo;
    2. public class Grade {
    3. private String subject;
    4. private int score;
    5. public Grade(){};
    6. public String getSubject() {
    7. return subject;
    8. }
    9. public void setSubject(String subject) {
    10. this.subject = subject;
    11. }
    12. public int getScore() {
    13. return score;
    14. }
    15. public void setScore(int score) {
    16. this.score = score;
    17. }
    18. @Override
    19. public String toString() {
    20. return "Grade [ " +
    21. "subject='" + subject + '\'' +
    22. ", score=" + score +
    23. " ]";
    24. }
    25. }

    再来编写一个控制类读取配置文件:

    1. package com.example.demo.controller;
    2. import com.example.demo.pojo.Grade;
    3. import org.springframework.boot.context.properties.ConfigurationProperties;
    4. import org.springframework.stereotype.Controller;
    5. import org.springframework.web.bind.annotation.RequestMapping;
    6. import java.util.List;
    7. @Controller
    8. @ConfigurationProperties(prefix = "user")
    9. public class YmlController2 {
    10. private int id;
    11. private String username;
    12. private List address;
    13. private List grades;
    14. @RequestMapping("/yml2")
    15. public void yml2(){
    16. System.out.println(id);
    17. System.out.println(username);
    18. System.out.println(address);
    19. System.out.println(grades);
    20. }
    21. @Override
    22. public String toString() {
    23. return "YmlController2 [" +
    24. "id=" + id +
    25. ", username='" + username + '\'' +
    26. ", address=" + address +
    27. ", grades=" + grades +
    28. " ]";
    29. }
    30. public YmlController2() {
    31. }
    32. public int getId() {
    33. return id;
    34. }
    35. public void setId(int id) {
    36. this.id = id;
    37. }
    38. public String getUsername() {
    39. return username;
    40. }
    41. public void setUsername(String username) {
    42. this.username = username;
    43. }
    44. public List getAddress() {
    45. return address;
    46. }
    47. public void setAddress(List address) {
    48. this.address = address;
    49. }
    50. public List getGrades() {
    51. return grades;
    52. }
    53. public void setGrades(List grades) {
    54. this.grades = grades;
    55. }
    56. }

    好了,现在我们运行看看能否获得数据:

    OK,在控制台中成功打印了说明该注解生效,是可以使用的。

    六、占位符的使用

    YAML文件中可以使用 ${} 占位符,它有两个作用:

    使用配置文件中的值

    比如说我们使用自定义的端口,并在页面展示:配置文件如下图

    我们再写一个控制器方法

    1. package com.example.demo.controller;
    2. import org.springframework.beans.factory.annotation.Value;
    3. import org.springframework.stereotype.Controller;
    4. import org.springframework.web.bind.annotation.RequestMapping;
    5. import org.springframework.web.bind.annotation.ResponseBody;
    6. @Controller
    7. public class YmlController3 {
    8. @Value("${myConfig.serverPort}")
    9. private int port;
    10. @RequestMapping("yml3")
    11. @ResponseBody
    12. public String getPort(){
    13. return "你的自定义端口为:"+port;
    14. }
    15. }

    运行测试

    也可以是可以成功注入的。 

    使用框架提供的方法

    SpringBoot框架提供了一些生成随机数的方法可以在yml文件中使用:

    • ${random.value} :生成类似uuid的随机数,没有"-"连接
    • ${random.uuid} :生成一个uuid,有短杠连接
    • ${random.int} :随机取整型范围内的一个值
    • ${random.int(10)}:随机生成一个10以内的数
    • ${random.int(100,200)}:随机生成一个100-200 范围以内的数
    • ${random.long}:随机取长整型范围内的一个值
    • ${random.long(100,200)}:随机生成长整型100-200范围内的一个值

    比如说随机生成一个1000-9999的端口:

  • 相关阅读:
    浅谈如何使用 github.com/yuin/gopher-lua
    22 年最全面试java八股文合集
    任何人均可上手的数据库与API搭建平台
    【学习笔记17】JavaScript作用域
    Java 全栈知识体系
    短时傅立叶变换分析
    Linux下 gdb调试打印数组元素说明
    SQL优化——统计信息
    Pytorch深度学习 - 学习笔记
    【Linux】内核驱动篇七--设备树
  • 原文地址:https://blog.csdn.net/qq_53317005/article/details/133416916