yaml数据读取的3种方式

时间:2025-04-05 07:17:22

在 resources 下创建一个名为 的配置文件,里面配置了不同的数据,内容如下

lesson: SpringBoot

server:
  port: 80

enterprise:
  name: itcast
  age: 16
  tel: 4006184000
  subject:
    - Java
    - 前端
    - 大数据

方法一: @value注解方式

@RestController
@RequestMapping("/books")
public class BookController {
    
    @Value("${lesson}")
    private String lesson;
    @Value("${}")
    private Integer port;
    @Value("${[0]}")
    private String subject_00;

    @GetMapping("/{id}")
    public String getById(@PathVariable Integer id){
        (lesson);
        (port);
        (subject_00);
        return "hello , spring boot!";
    }
}

方法二: Environment对象

上面方式读取到的数据特别零散,SpringBoot 还可以使用 @Autowired 注解注入 Environment 对象的方式读取数据。这种方式 SpringBoot 会将配置文件中所有的数据封装到 Environment 对象中,如果需要使用哪个数据只需要通过调用 Environment 对象的 getProperty(String name) 方法获取。具体代码如下:

@RestController
@RequestMapping("/books")
public class BookController {
    
    @Autowired
    private Environment env;
    
    @GetMapping("/{id}")
    public String getById(@PathVariable Integer id){
        (("lesson"));
        ((""));
        (("[0]"));
        return "hello , spring boot!";
    }
}

方法三:对自定义数据类型

SpringBoot 还提供了将配置文件中的数据封装到我们自定义的实体类对象中的方式。具体操作如下:

  • 将实体类 bean 的创建交给 Spring 管理。

在类上添加 @Component 注解

  • 使用 @ConfigurationProperties 注解表示加载配置文件

在该注解中也可以使用 prefix 属性指定只加载指定前缀的数据

  • 在 BookController 中进行注入

@RestController
@RequestMapping("/books")
public class BookController {
    
    @Autowired
    private Enterprise enterprise;

    @GetMapping("/{id}")
    public String getById(@PathVariable Integer id){
        (());
        (());
        (());
        (());
        (()[0]);
        return "hello , spring boot!";
    }
}

构建Enterprise类如下:

@Component
@ConfigurationProperties(prefix = "enterprise")  //将yaml中的哪个属性加载进来
public class Enterprise {
    private String name;
    private int age;
    private String tel;
    private String[] subject;

    public String getName() {
        return name;
    }

    public void setName(String name) {
         = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
         = age;
    }

    public String getTel() {
        return tel;
    }

    public void setTel(String tel) {
         = tel;
    }

    public String[] getSubject() {
        return subject;
    }

    public void setSubject(String[] subject) {
         = subject;
    }

    @Override
    public String toString() {
        return "Enterprise{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", tel='" + tel + '\'' +
                ", subject=" + (subject) +
                '}';
    }
}