Spring Boot读取配置文件内容的三种方式

导读:本篇文章讲解 Spring Boot读取配置文件内容的三种方式,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

系列文章目录

Spring Boot[概述、功能、快速入门]_心态还需努力呀的博客-CSDN博客

该系列文章持续更新中~


目录

系列文章目录

前言

一、@Value

二、Environment

2.1 注入对象

 2.2 调用获取属性的方法

 2.3 上述两种方法对比

三、@ConfigurationProperties

3.1 创建一个实体类

3.2 解决警告问题

 3.3 修改@ConfigurationProperties

 3.4 编写测试代码

总结


前言

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。控制台打印效果图如下:

Spring Boot读取配置文件内容的三种方式

 

二、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。控制台打印效果图如下:

Spring Boot读取配置文件内容的三种方式

 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注解后会出现下图所示的内容: 

Spring Boot读取配置文件内容的三种方式

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

 

Spring Boot读取配置文件内容的三种方式

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

 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());

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

Spring Boot读取配置文件内容的三种方式

 


总结

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之家整理,本文链接:https://www.bmabk.com/index.php/post/114627.html

(0)
Java光头强的头像Java光头强

相关推荐

发表回复

登录后才能评论
极客之家——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!