SpringBoot读取yml文件

yml 文件规则

  • key: value 格式书写
  • key 后面跟着冒号,再后面跟着一个空格,然后是值
  • yml不支持tab缩进
  • 可以使用 “-小写字母” 或 "_小写字母"来 代替 “大写字母”,如 userName 与 user-name、user_name 含义是一样的

yml常见格式

  1. 普通的值(数字,字符串,布尔)
    字符串默认不用加上单引号或者双引号,比如:
    "":双引号不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思
    name: “zhangsan \n lisi”:输出;zhangsan 换行 lisi
    ’’:单引号会转义特殊字符,特殊字符最终只是一个普通的字符串数据
    name: ‘zhangsan \n lisi’:输出;zhangsan \n lisi

  2. 对象、Map (属性和值) (键值对)
    对象还是k: v的方式。k: v:在下一行来写对象的属性和值的关系;注意缩进(不支持tab,使用空格)

  3. 数组 (List、Set)
    数组(List、Set)用- 值表示数组中的一个元素



方式一:@Value

配置文件内容:

name: hc
age: 18
content: "${name}的年龄是:${age}"

Controller代码:

@RestController
public class YmlInfoController {
    @Value("${name}")
    private String name;
    @Value("${age}")
    private Integer age;
    @Value("${content}")
    private String info;

    @RequestMapping("/f1")
    public String f1() {
        System.out.println(name + "\t" + age);
        return info;
    }
}

注意:@Value所在的类需要是一个组件,如果是实体类需要加上@Component注解。

方式二:@ConfigurationProperties

示例1:

配置文件内容:

stu:
  num: 1001
  name: zhangsan
  age: 18

实体类:

@Component
@ConfigurationProperties(prefix = "stu")
public class YmlInfo {

    private Integer num;
    private String name;
    private Byte age;

    public Integer getNum() {
        return num;
    }

    public void setNum(Integer num) {
        this.num = num;
    }

    public String getName() {
        return name;
    }

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

    public Byte getAge() {
        return age;
    }

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

Controller代码:

@RestController
public class YmlInfoController {
    @Autowired
    private YmlInfo ymlInfo;

    @RequestMapping("/f2")
    public YmlInfo f2(){
        return ymlInfo;
    }
}

示例2:

配置文件内容:

bean:
  map:
    num: 1001
    name: zhangsan
    age: 18

  array: 1,2,3,4,5,6

  list:
    - swim
    - jump
    - run
    - read

实体类:

@Component
@ConfigurationProperties(prefix = "bean")
public class YmlInfo {

    private Integer num;
    private String name;
    private Byte age;

    private Map<String,Object> map;
    private String[] array;
    private List<String> list;

    public Integer getNum() {
        return num;
    }

    public void setNum(Integer num) {
        this.num = num;
    }

    public String getName() {
        return name;
    }

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

    public Byte getAge() {
        return age;
    }

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

    public Map<String, Object> getMap() {
        return map;
    }

    public void setMap(Map<String, Object> map) {
        this.map = map;
    }

    public String[] getArray() {
        return array;
    }

    public void setArray(String[] array) {
        this.array = array;
    }

    public List<String> getList() {
        return list;
    }

    public void setList(List<String> list) {
        this.list = list;
    }
}

Controller代码:

@RestController
public class YmlInfoController {
    @Autowired
    private YmlInfo ymlInfo;

    @RequestMapping("/f22")
    public YmlInfo f22(){
        return ymlInfo;
    }
}

方式三:@Environment

配置文件内容:

array: 1,2,3,4,5,6

favorite:
  -swim
  -jump
  -run
  -read

Controller代码:

@RestController
public class YmlInfoController3 {
    @Autowired
    private Environment environment;

    @RequestMapping("/f3")
    public String f3() {
        String array = environment.getProperty("array");
        System.out.println(array);
        String favorite = environment.getProperty("favorite");
        return favorite;
    }
}
发布了258 篇原创文章 · 获赞 678 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/lianghecai52171314/article/details/104067461