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

目录
  • 前言
  • 一、@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。控制台打印效果图如下:

二、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读取配置文件内容内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • springboot读取配置文件中的参数具体步骤

    springBoot是java开发中会经常用到的框架,那么在实际项目中项目配置了springBoot框架,应该如何在项目中读取配置文件中的参数呢? 1.打开eclipse开发工具软件. 2.在项目中确保pom.xml文件已引用了[spring-boot-starter-web]jar包. 因为springBoot启动的时候会自动去获取项目中在resources文件录目下的名为application.properties参数配置文件. 3.在项目中的src/main/resource文件录目下创建

  • 详解SpringBoot读取配置文件的N种方法

    我们在项目开发中经常会用到配置信息,例如数据库连接的帐号.密码等,而为了方便维护,我们通常将这些信息放到配置文件中.在需要用到这些配置信息时,可以通过代码获取.下面我们看看Spring中有哪些获取配置信息的方法. PropertiesLoaderUtils读取 通过ClassPathResource加载配置文件资源,结合PropertiesLoaderUtils类读取,源码如下: ClassPathResource resource = new ClassPathResource("applic

  • SpringBoot读取配置文件的五种方法总结

    目录 1.使用 @Value 读取配置文件 2.使用 @ConfigurationProperties 读取配置文件 3.使用 Environment 读取配置文件 4.使用 @PropertySource 读取配置文件 中文乱码 注意事项 5.使用原生方式读取配置文件 总结 Spring Boot 中读取配置文件有以下 5 种方法: 使用 @Value 读取配置文件. 使用 @ConfigurationProperties 读取配置文件. 使用 Environment 读取配置文件. 使用 @

  • 在SpringBoot下读取自定义properties配置文件的方法

    SpringBoot工程默认读取application.properties配置文件.如果需要自定义properties文件,如何读取呢? 一.在resource中新建.properties文件 在resource目录下新建一个config文件夹,然后新建一个.properties文件放在该文件夹下.如图remote.properties所示 二.编写配置文件 remote.uploadFilesUrl=/resource/files/ remote.uploadPicUrl=/resource

  • SpringBoot读取配置文件常用方法解析

    首先回忆一下在没有使用SpringBoot之前也就是传统的spring项目中是如何读取配置文件,通过I/O流读取指定路径的配置文件,然后再去获取指定的配置信息. 传统项目读取配置方式# 读取xml配置文件 public String readFromXml(String xmlPath, String property) { SAXReader reader = new SAXReader(); Document doc = null; try { doc = reader.read(new F

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

    目录 前言 一.@Value 二.Environment 2.1 注入对象 2.2 调用获取属性的方法 2.3 上述两种方法对比 三.@ConfigurationProperties 3.1 创建一个实体类 3.2 解决警告问题 3.3 修改@ConfigurationProperties 3.4 编写测试代码 总结 前言 Spring Boot中在yaml中编写的自定义变量.数组.对象等,在代码中读取该yaml配置文件中内容的三种方式.实现在代码中运用配置文件(yaml)中自定义的值.yaml

  • 详解Spring Boot读取配置文件与配置文件优先级

    Spring Boot读取配置文件 1)通过注入ApplicationContext 或者 Environment对象来读取配置文件里的配置信息. package com.ivan.config.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframe

  • Spring boot调用Oracle存储过程的两种方式及完整代码

    前言 因工作需要将公司SSH项目改为Spingboot项目,将项目中部分需要调用存储过程的部分用entityManagerFactory.unwrap(SessionFactory.class).openSession()来获取Session实现后发现项目访问数据库超过十次就会挂掉,原因是Springboot连接池数量默认为10,猜测是每次访问数据库后连接未释放导致的,手动关闭session后问题解决. 解决问题的过程中又发现了另外两种调用方式: 直接用EntityManager的createS

  • Spring Boot中获取request的三种方式及请求过程

    目录 一.请求过程 二.获取request的三种方式 2.1.可以封装为静态方法 2.2.controller的方法里面 2.3.直接注入 三.request常用API 3.1.request路径相关 3.2.Header相关 3.3.获取请求体 3.4.获取参数 3.5.中文乱码 3.6.转发 3.7.共享数据 四.response常用API 五.常用工具类 5.1.封装的 5.2.Hutool工具类 本篇博客主要记录request相关知识,也是开发当中经常遇到的,感兴趣的跟小编一起学习吧!

  • PHP读取文件内容的五种方式

    php读取文件内容的五种方式 分享下php读取文件内容的五种方法:好吧,写完后发现文件全部没有关闭.实际应用当中,请注意关闭 fclose($fp); -- php读取文件内容: -----第一种方法-----fread()-------- <?php $file_path = "test.txt"; if(file_exists($file_path)){ $fp = fopen($file_path,"r"); $str = fread($fp,files

  • spring boot ajax跨域的两种方式

    前言 java语言在多数时,会作为一个后端语言,为前端的php,node.js等提供API接口.前端通过ajax请求去调用java的API服务.今天以node.js为例,介绍两种跨域方式:CrossOrigin和反向代理.  一.准备工作 pom.xml: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0&quo

  • 详解Spring Boot 中实现定时任务的两种方式

    在 Spring + SpringMVC 环境中,一般来说,要实现定时任务,我们有两中方案,一种是使用 Spring 自带的定时任务处理器 @Scheduled 注解,另一种就是使用第三方框架 Quartz ,Spring Boot 源自 Spring+SpringMVC ,因此天然具备这两个 Spring 中的定时任务实现策略,当然也支持 Quartz,本文我们就来看下 Spring Boot 中两种定时任务的实现方式. @Scheduled 使用 @Scheduled 非常容易,直接创建一个

  • Spring Boot实现热部署的五种方式

    1.模板热部署 在 Spring Boot 中,模板引擎的页面默认是开启缓存的,如果修改了页面的内容,则刷新页面是得不到修改后的页面的,因此我们可以在application.properties中关闭模版引擎的缓存,如下:Thymeleaf的配置: spring.thymeleaf.cache=false FreeMarker的配置: spring.freemarker.cache=false Groovy的配置: spring.groovy.template.cache=false Veloc

  • Spring Boot中防止递归查询的两种方式

    本文主要给大家介绍了关于Spring Boot防止递归查询的相关内容,这只是一个小提醒,这里有两种方式,很简单,下面来看看详细的介绍: 1.在application.properties中配置 #懒加载配置 spring.jpa.properties.hibernate.enable_lazy_load_no_trans=true 2.在entity中添加注解 在关联对象上添加@JsonBackReference 在类上添加@JsonIgnoreProperties("roles")

  • 详解Spring Boot中初始化资源的几种方式

    假设有这么一个需求,要求在项目启动过程中,完成线程池的初始化,加密证书加载等功能,你会怎么做?如果没想好答案,请接着往下看.今天介绍几种在Spring Boot中进行资源初始化的方式,帮助大家解决和回答这个问题. CommandLineRunner 定义初始化类 MyCommandLineRunner 实现 CommandLineRunner 接口,并实现它的 run() 方法,在该方法中编写初始化逻辑 注册成Bean,添加 @Component注解即可 示例代码如下: @Component p

随机推荐