springboot yml文件自定义配置的读取、使用 字符串 数组 对象 集合

.yml 配置

# 自定义开发环境端口 默认本地 9801
# serverPort: 9801
spring:
  profiles: dev
# 环境的配置
server:
  port: 9801



# 自定义对象/配置
student:
  name: 李四
  age: 25
  jobs: #数组方式1                                      @ConfigurationProperties 方式可以获取; @Value方式、Environment方式获取不到
    - java
      linux
      123
  loves: [看电影,玩游戏,游泳,aaaa,456] # 数组方式2        @ConfigurationProperties 方式可以获取; @Value方式、Environment方式获取不到
  books: 水浒,西游,红楼梦,三国 # 数组方式3                @所有方式都可获取
  frands: # List方式1                                  @ConfigurationProperties 方式可以获取; @Value方式、Environment方式获取不到
    - 李雷
      韩梅梅
      本山
  familys: [李父,李牧,李姐,李弟,456] # List方式2         @ConfigurationProperties 方式可以获取; @Value方式、Environment方式获取不到
  organ: 眼,#耳,.#口,鼻 # List方式3                        @所有方式都可获取


# 对象集合                                              @ConfigurationProperties 方式可以获取并封装成对象集合
users:
  user:
    - name: tom
      age: 18
    - name: 韩梅梅
      age: 15

controller代码

import com.tencent.gateway.entity.Student;
import com.tencent.gateway.entity.User;
import com.tencent.gateway.entity.Users;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import org.springframework.core.env.Environment;
import org.springframework.beans.factory.annotation.Value;

import java.util.Arrays;
import java.util.List;


@RestController
@RequestMapping("/test")
public class TestController {

    //方式1:对象中使用 @ConfigurationProperties 加载配置到对象属性中
    @Autowired
    private Student student;//配置文件对应的对象
    @Autowired
    private Users users;//配置文件对应的对象集合

    @GetMapping("/test1")
    public Object test1(){
        System.out.println("方式1:@ConfigurationProperties 获取配置:");
        System.out.println();
        System.out.println(student.name);
        System.out.println(student.age);
        System.out.println(Arrays.toString(student.jobs));
        System.out.println(Arrays.toString(student.loves));
        System.out.println(Arrays.toString(student.books));
        System.out.println(student.frands.toString());
        System.out.println(student.familys.toString());
        System.out.println(student.organ.toString());

        System.out.println();
        System.out.println("usersList:");
        for (User user: users.user){
            System.out.println(user.name);
            System.out.println(user.age);
        }

        return "success";
    }



    //方式2:使用 Environment
    @Autowired
    Environment env;

    @GetMapping("/test2")
    public Object test2(){
        System.out.println("方式2:Environment 获取配置:");
        System.out.println();
        System.out.println(env.getProperty("server.port"));
        System.out.println(env.getProperty("student.name"));
        System.out.println(env.getProperty("student.age"));
        System.out.println(env.getProperty("student.jobs"));    //获取不到
        System.out.println(env.getProperty("student.loves"));   //获取不到
        System.out.println(env.getProperty("student.books"));   //          可以获取
        System.out.println(env.getProperty("student.frands"));  //获取不到
        System.out.println(env.getProperty("student.familys")); //获取不到
        System.out.println(env.getProperty("student.organ"));   //          可以获取
        return "success";
    }



    //方式3:使用 @Value 映射 获取指定配置参数值, 冒号后的1111为默认值
    @Value("${server.port:1111}")
    private String port;
    @Value("${student.name}")
    public String name;
    @Value("${student.age}")
    private int age;
    @Value("${student.jobs:}")
    private String[] jobs;
    @Value("${student.loves:}")
    private String[] loves;
    @Value("${student.books:}")
    private String[] books;
    @Value("${student.frands:a,a,a,a}")//冒号后指定默认值
    private List<String> frands;
    @Value("${student.familys:}")
    private List<String> familys;
    @Value("#{'${student.organ}'.split(',')}") //使用指定分割符分割字符串数组(部分字符不支持,比如 .)
    private List<String> organ;
    @Value("#{'${student.organ}'.split('#')}") //使用指定分割符分割字符串数组(部分字符不支持,比如 .)
    private List<String> organ2;

    @GetMapping("/test3")
    public Object test3(){
        System.out.println("方式3:@Value 映射 获取配置:");
        System.out.println();
        System.out.println(port);
        System.out.println(name);
        System.out.println(age);
        System.out.println(Arrays.toString(jobs));  //获取不到
        System.out.println(Arrays.toString(loves)); //获取不到
        System.out.println(Arrays.toString(books)); //          可以获取
        System.out.println(frands.toString());      //获取不到
        System.out.println(familys.toString());     //获取不到

        System.out.println();
        System.out.println("organ:(逗号分割)");
        System.out.println(organ.toString());       //          可以获取
        for (String organSplit: organ){
            System.out.println(organSplit);
        }

        System.out.println();
        System.out.println("organ2:(号分割)");
        System.out.println(organ2.toString());      //          可以获取
        for (String organSplit: organ2){
            System.out.println(organSplit);
        }

        return "success";
    }
}

实体类

Student.java

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.util.List;

@Component
@ConfigurationProperties(prefix = "student")
public class Student {

    public String name;

    public int age;

    public String[] jobs;

    public String[] loves;

    public String[] books;

    public List<String> frands;

    public List<String> familys;

    public List<String> organ;


    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

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

    public String[] getJobs() {
        return jobs;
    }

    public void setJobs(String[] jobs) {
        this.jobs = jobs;
    }

    public String[] getLoves() {
        return loves;
    }

    public void setLoves(String[] loves) {
        this.loves = loves;
    }

    public List<String> getFrands() {
        return frands;
    }

    public void setFrands(List<String> frands) {
        this.frands = frands;
    }

    public List<String> getFamilys() {
        return familys;
    }

    public void setFamilys(List<String> familys) {
        this.familys = familys;
    }

    public String[] getBooks() {
        return books;
    }

    public void setBooks(String[] books) {
        this.books = books;
    }

    public List<String> getOrgan() {
        return organ;
    }

    public void setOrgan(List<String> organ) {
        this.organ = organ;
    }
}

Users.java

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.util.List;

@Component
@ConfigurationProperties(prefix = "users")
public class Users {

    public List<User> user; //自动将users.user下的所有数组封装到User对象集合中

    public List<User> getUser() {
        return user;
    }

    public void setUser(List<User> user) {
        this.user = user;
    }
}

User.java

public class User {
    public String name;
    public int age;

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

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

方式一、

http://localhost:9801/test/test1

方式二、

http://localhost:9801/test/test2

方式三、

http://localhost:9801/test/test3

参考:

SpringBoot:yml文件详解-CSDN博客

https://www.jb51.net/article/216769.htm

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot中,可以使用YAML(YAML Ain't Markup Language)文件来进行配置。常见的YAML文件名为application.yml或application.yaml。 为了实现自定义的YAML文件读取,可以按照以下步骤操作: 1. 在src/main/resources目录下创建一个新的YAML文件,例如custom.yml,用于存放自定义配置项。 2. 在Spring Boot配置类中,使用@ConfigurationProperties注解,并指定prefix属性为自定义配置项前缀。 例如,如果自定义配置项前缀为custom,可以将配置类的注解写成如下形式: ```java @Configuration @ConfigurationProperties(prefix = "custom") public class CustomConfig { private String name; private int age; // 其他属性及对应的getter和setter方法 } ``` 3. 在类中定义相应的属性,并为每个属性编写getter和setter方法。 4. 在配置类所在的包中创建一个名为CustomConfigurator的类,用于在启动时将自定义配置加载到Spring容器中。 ```java @Component public class CustomConfigurator implements CommandLineRunner { @Autowired private CustomConfig customConfig; @Override public void run(String... args) { // 在Spring启动时执行的逻辑 // 可以在这个方法中获取和使用自定义配置项 String name = customConfig.getName(); int age = customConfig.getAge(); // 其他逻辑 } } ``` 5. 在application.yml中添加以下内容,指定自定义配置文件的路径: ```yaml spring: profiles: include: custom ``` 这样,Spring Boot会加载application.yml以及custom.yml中的配置,并将其注入到CustomConfig配置类对应的属性中。 通过以上步骤,就实现了自定义的YAML文件读取。在启动应用时,Spring Boot会自动加载并注入自定义配置项,可以在代码中直接使用。 需要注意的是,自定义配置项的前缀要与custom.yml文件中的层级结构对应,而且类名和属性名要与custom.yml文件中的字段名保持一致。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值