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

作者:心态还需努力呀 时间:2022-09-24 05:52:17 

前言

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读取配置文件内容的3种方式(@Value、Environment和@ConfigurationProperties)

二、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读取配置文件内容的3种方式(@Value、Environment和@ConfigurationProperties)

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读取配置文件内容的3种方式(@Value、Environment和@ConfigurationProperties)

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

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

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

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读取配置文件内容的3种方式(@Value、Environment和@ConfigurationProperties)

来源:https://blog.csdn.net/weixin_52258054/article/details/128536322

标签:springboot,读取,配置文件
0
投稿

猜你喜欢

  • java 实现将一个string保存到txt文档中

    2022-07-30 05:32:38
  • java反射机制示例详解

    2021-08-07 07:51:59
  • java中fork-join的原理解析

    2023-12-13 08:49:16
  • Mybatis 动态SQL的几种实现方法

    2023-11-10 12:15:15
  • C# 使用Fluent API 创建自己的DSL(推荐)

    2022-03-30 23:36:48
  • dom4j读取XML文件详解

    2022-02-21 09:23:29
  • SpringBoot数据访问自定义使用Druid数据源的方法

    2023-01-10 16:29:38
  • android里TextView加下划线的几种方法总结

    2022-03-25 10:42:18
  • SpringBoot整合EasyExcel实现文件导入导出

    2021-11-07 17:14:51
  • Java LinkedList实现班级信息管理系统

    2021-06-27 04:00:11
  • 安卓实现自定义圆形取色盘

    2022-01-14 18:01:55
  • Java常见的阻塞队列总结

    2022-10-03 10:12:06
  • mybatis 字段名自动转小写的实现

    2021-09-09 20:04:26
  • Spring Boot整合Kafka教程详解

    2023-06-14 06:02:54
  • Android通过aapt命令获取apk详细信息(包括:文件包名,版本号,SDK等信息)

    2023-11-01 11:29:19
  • ProtoBuf动态拆分Gradle Module解析

    2022-01-06 17:45:21
  • Android仿京东搜索框渐变效果

    2022-09-08 19:57:05
  • java启动jar包修改JVM默认内存问题

    2022-03-17 21:50:09
  • mybatis 集合嵌套查询和集合嵌套结果的区别说明

    2022-10-12 15:17:02
  • C#中程序自删除实现方法

    2021-06-01 19:47:29
  • asp之家 软件编程 m.aspxhome.com