亲宝软件园·资讯

展开

Spring Boot读取配置文件内容的3种方式(@Value、Environment和@ConfigurationProperties)

心态还需努力呀 人气:0

前言

Spring Boot中在yaml中编写的自定义变量、数组、对象等,在代码中读取该yaml配置文件中内容的三种方式。实现在代码中运用配置文件(yaml)中自定义的值。yaml的基本语法格式我不知道该怎么总结,很简单,学完我的唯一感受就是记得冒号后面加空格、加空格、加空格。。。所以这里直接将读取配置文件内容的三种方式。不清楚yaml语法格式的可以先去了解一下。

在开始获取前,首先在resources下配置aplication.yaml文件,在yaml文件内编写自定义的变量、数组、对象。已用来展示获取的内容值。代码如下:

name: 心态还需努力呀
 
#对象
person:
  name: lisi
  age: 20
 
#数组
address:
  - shanghai
  - beijing

一、@Value

在Controller类下给属性分别以@Value注解的方式分别赋值,@Value里的${yaml变量名}。

获取对象就对象.变量名。

获取数组就是使用索引的方式数组[0],在这里表示数组中的第一个值(上海)。

具体代码如下:

package com.imust.controller;
 
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
 
@RestController
public class HelloController {
    @Value("${name}")
    private String name;
//    获取对象
    @Value("${person.name}")
    private String person_name;
 
    @Value("${person.age}")
    private int person_age;
 
//    获取数组
    @Value("${address[0]}")
    private String address1;
 
    @Value("${address[1]}")
    private String address2;
 
    @RequestMapping("/hello")
    public String hello(){
        System.out.println(name);
        System.out.println(person_name);
        System.out.println(person_age);
        System.out.println(address1);
        System.out.println(address2);
        System.out.println("========================");
        return "Hello,Spring Boot!";
    }
}

 运行http://localhost:8080/hello。控制台打印效果图如下:

二、Environment

2.1 注入对象

注入对象需要用到Autowired注解

@Autowired
    private Environment env;

2.2 调用获取属性的方法

方法内传入参数与上面@Value里的参数一样,都是与yaml文件配置里面自定义的一致。

System.out.println(env.getProperty("name"));
System.out.println(env.getProperty("person.name"));
System.out.println(env.getProperty("person.age"));
System.out.println(env.getProperty("address[0]"));

运行后http://localhost:8080/hello。控制台打印效果图如下:

2.3 上述两种方法对比

首先第一种@Value方法便于理解,用起来也很简单,就是属性多了后会出现大量的@Value给属性赋值,代码不够精简。

第二种就解决了这一麻烦,只需要注入Environment对象后,直接使用getProperty方法里写入要读入的值的key就可获取到。代码会很精简。

三、@ConfigurationProperties

3.1 创建一个实体类

这里以获取配置文件中的person对象值为例。所以名字叫Person。在上方添加@ConfigurationProperties注解。

代码如下:

package com.imust.pojo;
 
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
 
@Component
@ConfigurationProperties
public class Person {
    private String name;
    private 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;
    }
 
    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

3.2 解决警告问题

当加上@ConfigurationProperties注解后会出现下图所示的内容: 

点击上图箭头所指的地方,进入网页后将依赖赋值放到自己的pom.xml文件的放依赖的地方。

导入依赖下载完成后上述的警告就会消失。

3.3 修改@ConfigurationProperties

因为我们有2个name的值,如果不加参数获取默认是取高层级下的值,age就不会被取出来。

所以我们要加上perfix=“person”,用来指定该类下的属性是指的person对象下的值。

@ConfigurationProperties(prefix = "person")

3.4 编写测试代码

在Controller注入Person

@Autowired
    private Person person;

打印person查看效果 

System.out.println(person.toString());

查看控制台输出的结果,可看到读取配置文件内容成功。

总结

读取配置文件的内容的三种方法就已经演示完成,在大多数属性少的情况下还是用@Value的方法最为简便。精简的话还是第二种注入对象的方式使代码看起来更加美观。理解起来不太容易。第三种是在特殊的情况下比较常用的读取配置文件的内容可以封装为对象。第一种是必须会的,二三种可以简单理解,用到时可以参考资料也会很快的想起来并且快速的运用。

加载全部内容

相关教程
猜你喜欢
用户评论