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。控制台打印效果图如下:
二、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());
查看控制台输出的结果,可看到读取配置文件内容成功。
来源:https://blog.csdn.net/weixin_52258054/article/details/128536322


猜你喜欢
- 简介switch的新特性可是源远流长,早在JDK 12就以预览功能被引入了,最终在JDK 14成为了正式版本的功能:JEP 361: Swi
- 今天突然想起来,java产生随机数的问题,上机试了一下,找到了一点区别,在这里总结一下;直接调用Math.random()是产生一个[0,1
- package airthmatic;public class demo10 { public static void main(
- 今天把Android Studio 2.3 更新为了3.0 遇到一个蛋疼的问题如图:格式化完代码后发现不会自动换行了,看着真心不爽。后来发现
- 定义装饰者模式:在不改变原有对象的基础之上,动态的将功能附加到对象上,提供了继承更有弹性的替代方案,也体现了开闭原则案例需求一个人去咖啡店点
- 使用Unity API PlayerBuildInterface.CompilePlayerScripts 将项目中的代码生成为 DLL 程
- 本文实例讲述了C#在运行时动态创建类型的实现方法。是C#项目开发中很实用的技巧。分享给大家供大家参考。具体分析如下:具体来说,C# 在运行时
- 本文实例为大家分享了Android弹出菜单效果的具体代码,供大家参考,具体内容如下功能描述:用户单击按钮弹出菜单。当用户选择一个菜单项,会触
- 本文实例讲述了C#通过属性名字符串获取、设置对象属性值操作.分享给大家供大家参考,具体如下:#通过反射获取对象属性值并设置属性值0、定义一个
- 前言Vector是java.util包中的一个类。 SynchronizedList是java.util.Collections中的一个静态
- 通常情况下我们想实现文字的走马灯效果需要在xml文件中这样设置<TextView android:layout_widt
- 本文实例讲述了C#队列Queue多线程用法。分享给大家供大家参考。具体分析如下:这里展示一个例子,供学习使用:private void bu
- 今天有同事用swagger2开发时,有一方法返回Map<String,List<Object>>出现无法解析错误。P
- Android Studio下载(下文统称AS)AS最新版下载请戳:AS下载Android SDK下载SDK安装器下载SDK安装器下载请戳:
- JVM之方法返回地址JVM运行时数据区的虚拟机栈的栈帧中包含了返回地址当一个方法开始执行后,只有两种方式可以退出这个方法。第一种方式是执行引
- 1、MediaCodec调用流程首先,我们先看下MediaCodec::CreateByType函数里面做了什么:sp<MediaCo
- 目录1、IP地址2、端口3、通信协议3.1 TCP/IP协议簇:实际上是一组协议3.2 TCP UDP对比3.3 TCP实现聊天3.4 TC
- 本文实例为大家分享了C#使用NPOI设置Excel下拉选项的具体代码,供大家参考,具体内容如下最近在做一个导出模板的功能,需要限制用户的某些
- 获取非公平锁(基于JDK1.7.0_40)非公平锁和公平锁在获取锁的方法上,流程是一样的;它们的区别主要表现在“尝试获取锁的机制不同”。简单
- 大家好,我是梦辛工作室的灵,最近在帮客户修改安卓程序时,有要求到一个按钮要浮动在键盘的上方,下面大概讲一下实现方法:其实很简单,分三步走第一