文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2023-01-04 18:00

关注

前言

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的方法最为简便。精简的话还是第二种注入对象的方式使代码看起来更加美观。理解起来不太容易。第三种是在特殊的情况下比较常用的读取配置文件的内容可以封装为对象。第一种是必须会的,二三种可以简单理解,用到时可以参考资料也会很快的想起来并且快速的运用。

到此这篇关于Spring Boot读取配置文件内容的3种方式的文章就介绍到这了,更多相关Spring Boot读取配置文件内容内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯