springboot如何读取application.yml文件

 更新时间:2020年12月10日 09:26:39   作者:迷茫中守候  
这篇文章主要介绍了springboot如何读取application.yml文件的方法,帮助大家更好的理解和使用springboot框架,感兴趣的朋友可以了解下

现在开发主要使用微服务框架springboot,在springboot中经常遇到读取application.yml文件的情形。

一、概述

开发过程中经常遇到要读取application.yml文件中的属性值,本文总结几种读取的方式,供参考。

二、详述

我这里使用的是springboot-2.1.2.RELEASE版本,这里使用的是application.properties的配置方式,和使用application.yml的方式是一样的。下面是application.properties文件的内容

cn.com.my.test1=test1
cn.com.my.test2=test2

1、@Value注解

 这种方式是spring最早提供的方式,通过@Value注解的方式,该注解用在属性上,但是要求该属性所在的类必须要被spring管理。

package com.example.demo.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.ResponseBody;

@Controller
public class TestController {

  @Value("${cn.com.my.test1}")
  private String test1;
  @Value("${cn.com.my.test2}")
  private String test2;

  @RequestMapping("/test1/test")
  @ResponseBody
  public String getTest(){
    return "hello:"+test1+",test2:"+test2;
  }

}

在标记有@Controller类中使用了带有@Value注解的test1和test2的属性,首先标记有@Controller注解便可以使该类被spring管理。其次,使用@Value标记了属性,则可以获得application.properties(application.yml)文件中的属性,这里使用${cn.com.my.test1},属性的名称必须是全部的名称,测试结果如下,

2、@ConfigurationProperties

@ConfigurationProperties注解是springboot提供的,在springboot中大量使用,下面看其用法,

使用@Component注解

这里需要定义一个类,

package com.example.demo.properties;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Component
@ConfigurationProperties(prefix = "cn.com.my")
public class ApplicationPro {
  private String test1;
  private String test2;  private String testName;

  //必须有set方法
  public void setTest1(String test1) {
    this.test1 = test1;
  }

  //必须有set方法
  public void setTest2(String test2) {
    this.test2 = test2;
  }

  public String getTest1() {
    return test1;
  }

  public String getTest2() {
    return test2;
  }
public void setTestName(String testName) {  this.testName = testName;}public String getTestName() {  return testName;}
}

该类上使用了@ConfigurationProperties注解,且配置了prefix属性,指定了要获取属性的前缀,这里的前缀是cn.com.my,在类中定义的属性名最好和application.properties文件中的一致,不过这种方式可以采用稀疏匹配,把application.properties修改为下面的内容,

cn.com.my.test1=test1
cn.com.my.test2=test2
cn.com.my.test-name="hello world"

另外,在ApplicationPro类上标记有@Component注解,标记该注解的意思是要把该类交给spring管理,也就是说要让spring管理此类,其实也可以使用其他注解,如,@Service等

下面看测试类,

package com.example.demo.controller;

import com.example.demo.properties.ApplicationPro;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class TestController3 {
  @Autowired
  private ApplicationPro ap;
  @RequestMapping("test3/test")
  @ResponseBody
  public String getTest(){
    return ap.getTest1()+","+ap.getTest2()+","+ap.getTestName();
  }
}

看测试结果,

从上面的结果可以看出已经获得了application.properties文件中的值,并且获得了test-name的值。具体匹配规则可以自行百度,这里强烈建议配置文件中的属性和类中的保持一致。

使用@EnableConfigurationProperties注解
使用该注解在ApplicationPro类中便不需要使用@Component注解,

package com.example.demo.properties;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

//@Component
@ConfigurationProperties(prefix = "cn.com.my")
public class ApplicationPro {
  private String test1;
  private String test2;
  private String testName;

  //必须有set方法
  public void setTest1(String test1) {
    this.test1 = test1;
  }

  //必须有set方法
  public void setTest2(String test2) {
    this.test2 = test2;
  }

  public String getTest1() {
    return test1;
  }

  public String getTest2() {
    return test2;
  }

  public void setTestName(String testName) {
    this.testName = testName;
  }

  public String getTestName() {
    return testName;
  }
}

再看启动类,在启动类上标记了@EnableConfigurationProperties({ApplicationPro.class}),也就是使@ConfigurationProperties注解生效,并标记了标有@ConfigurationProperties注解的类Application.class

package com.example.demo;

import com.example.demo.properties.ApplicationPro;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;

@SpringBootApplication
@EnableConfigurationProperties({ApplicationPro.class})
public class DemoApplication {

  public static void main(String[] args) {
    SpringApplication.run(DemoApplication.class, args);
  }

}

下面看测试结果,

3、Environment对象

使用Environment对象,该对象是spring提供的一个对象,且是spring内部创建的对象,

package com.example.demo.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class TestController2 {
  @Autowired
  private Environment environment;

  @RequestMapping("/test2/test")
  @ResponseBody
  public String getTest(){
    return "hello,"+environment.getProperty("cn.com.my.test1")+","+"test2:"+environment.getProperty("cn.com.my.test2");
  }
}

可以看到,可以直接注入该对象的实例,通过其getProperty方法获得相应的属性值。

三、总结

 本文总结了,在使用springboot的过程中获取配置文件中的几种方式,

@Value

@ConfigurationProperties

Environment对象

有不当之处,欢迎指正,谢谢。

以上就是springboot如何读取application.yml文件的详细内容,更多关于springboot 读取application.yml文件的资料请关注脚本之家其它相关文章!

相关文章

  • Java实现的KNN算法示例

    Java实现的KNN算法示例

    这篇文章主要介绍了Java实现的KNN算法,结合实例形式分析了KNN算法的原理及Java定义与使用KNN算法流程、训练数据相关操作技巧,需要的朋友可以参考下
    2018-06-06
  • java中Map如何根据key的大小进行排序详解

    java中Map如何根据key的大小进行排序详解

    这篇文章主要给大家介绍了关于java中Map如何根据key的大小进行排序的相关资料,有时候我们业务上需要对map里面的值按照key的大小来进行排序的时候我们就可以利用如下方法来进行排序了,需要的朋友可以参考下
    2023-09-09
  • JAVA中常见异常类

    JAVA中常见异常类

    本文主要介绍了JAVA中的常见异常类。具有很好的参考价值,下面跟着小编一起来看下吧
    2017-01-01
  • Required request body is missing的问题及解决

    Required request body is missing的问题及解决

    这篇文章主要介绍了Required request body is missing的问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • Java中对list元素进行排序的方法详解

    Java中对list元素进行排序的方法详解

    这篇文章主要介绍了Java中对list元素进行排序的方法详解,是Java入门学习中的基础知识,需要的朋友可以参考下
    2015-09-09
  • Kafka使用Java客户端进行访问的示例代码

    Kafka使用Java客户端进行访问的示例代码

    本篇文章主要介绍了Kafka使用Java客户端进行访问的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • 使用IDEA配置Mybatis-Plus框架图文详解

    使用IDEA配置Mybatis-Plus框架图文详解

    这篇文章主要介绍了使用IDEA配置Mybatis-Plus框架,本文通过图文实例相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • Java连接数据库,及增删改查的示例

    Java连接数据库,及增删改查的示例

    这篇文章主要介绍了Java连接数据库,及增删改查的示例,帮助大家更好的利用Java处理数据,感兴趣的朋友可以了解下
    2020-10-10
  • mybatis 集合嵌套查询和集合嵌套结果的区别说明

    mybatis 集合嵌套查询和集合嵌套结果的区别说明

    这篇文章主要介绍了mybatis 集合嵌套查询和集合嵌套结果的区别说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • Java全能工具类之Hutool的用法详解

    Java全能工具类之Hutool的用法详解

    Hutool是一个Java工具类库,由国内的程序员loolly开发,目的是提供一些方便、快捷、实用的工具类和工具方法,本文就来详细聊聊它的使用吧
    2023-03-03

最新评论