Java如何使用ConfigurationProperties获取yml中的配置

目录
  • 使用ConfigurationProperties获取yml的配置
    • 使用方法
  • @ConfigurationProperties获取不到配置文件属性值问题
    • 原因就是

使用ConfigurationProperties获取yml的配置

我们在开发过程中,会经常遇到需要自定义配置的场景,比如配置一个ip,一个地址等,并将其写入到yml文件中,在项目中使用@Value("${xxxx.xxxx}")来获取自定义的配置,其实是这样是有些笨重的,每定义一个配置,都需要写一个@Value来获取,那为啥不使用一个java config来统一获取配置呢?

使用方法

编写yml配置文件

user:
  config:
    # user_name user-name userName这三种配置方式都可以被识别到
    user_name: "zhangsan"
    age: "20"
    exmail: "123@123.com"
    address: "火星"

编写Java config类

// 需要重写get与set方法,此处使用lombok注解来代替
@Data
// 实例化到spring容器中
@Component
// 获取前缀为user.config的配置信息,与该类下的属性对比,进行绑定
@ConfigurationProperties(prefix = "user.config")
public class UserConfig {
    private String userName;
    private String age;
    private String exmail;
    private String address;
}

在需要使用的地方注入

    @Resource
    private UserConfig userConfig;

测试

@ConfigurationProperties获取不到配置文件属性值问题

application.yml

配置类

@Component
@ConfigurationProperties(prefix = "system")
public class SystemConfig {
    /**
     * 项目名称
     */
    private static String name;
    /**
     * 版本
     */
    private String version;
    /**
     * 版权年份
     */
    private String copyrightYear;
    /**
     * 实例演示开关
     */
    private boolean demoEnabled;
    /**
     * windows环境下,文件上传路径(本地上传)
     */
    private static String winUploadPath;
    /**
     * 其他系统环境(linux、Mac...)环境下,文件上传路径(本地上传)
     */
    private static String otherUploadPath;
    /**
     * 获取地址开关
     */
    private static boolean addressEnabled;
    public static String getName() {
        return name;
    }
    public void setName(String name) {
        SystemConfig.name = name;
    }
    public String getVersion() {
        return version;
    }
    public void setVersion(String version) {
        this.version = version;
    }
    public String getCopyrightYear() {
        return copyrightYear;
    }
    public void setCopyrightYear(String copyrightYear) {
        this.copyrightYear = copyrightYear;
    }
    public boolean isDemoEnabled() {
        return demoEnabled;
    }
    public void setDemoEnabled(boolean demoEnabled) {
        this.demoEnabled = demoEnabled;
    }
    public static String getWinUploadPath() {
        return winUploadPath;
    }
    public static void setWinUploadPath(String winUploadPath) {
        SystemConfig.winUploadPath = winUploadPath;
    }
    public static String getOtherUploadPath() {
        return otherUploadPath;
    }
    public static void setOtherUploadPath(String otherUploadPath) {
        SystemConfig.otherUploadPath = otherUploadPath;
    }
    public static boolean isAddressEnabled() {
        return addressEnabled;
    }
    public void setAddressEnabled(boolean addressEnabled) {
        SystemConfig.addressEnabled = addressEnabled;
    }
    /**
     * 判断当前操作系统,返回相应的本地上传路径
     *
     * @return String
     * @author Liangyixiang
     * @date 2021/11/15
     **/
    public static String getUploadPath() {
        OsInfo osInfo = SystemUtil.getOsInfo();
        // 判断系统环境获取上传路径
        if(ObjectUtils.isNotEmpty(osInfo) && osInfo.isWindows()){
            return getWinUploadPath();
        }else{
            return getOtherUploadPath();
        }
    }
    /**
     * 获取业务系统名称
     */
    public static String getSystemName() {
        return getName();
    }
}

name、addressEnabled 以及 winUploadPath、otherUploadPath 都是静态的成员变量,但是他们name、addressEnabled能获取到配置文件的值,winUploadPath、otherUploadPath不可以。

原因就是

winUploadPath、otherUploadPath对应的ser方法也定义为了静态方法。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • SpringBoot获取yml和properties配置文件的内容

    (一)yml配置文件: pom.xml加入依赖: <!-- 支持 @ConfigurationProperties 注解 --> <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-configuration-processor --> <dependency> <groupId>org.springframework.boot</groupId>

  • 迅速学会@ConfigurationProperties的使用操作

    目录 @ConfigurationProperties的使用 @ConfigurationProperties Spring配置方式 注解@ConfigurationProperties使用方法 @ConfigurationProperties 作用于方法 作用于Class类及其用法 总结 @ConfigurationProperties的使用 @ConfigurationProperties标签可以把.yml文件里的配置读取到类里 比如,我需要把钉钉小程序的app-key和app-secret

  • SpringBoot读取properties或者application.yml配置文件中的数据

    读取application文件 在application.yml或者properties文件中添加: user.address=china user.company=demo user.name=让我康康 1.使用@Value注解读取 直接 代码如下: package im.homeapi.controller; import org.springframework.beans.factory.annotation.Value; import org.omg.CORBA.PUBLIC_MEMBE

  • Springboot 如何指定获取出 yml文件里面的配置值

    之前写过一篇获取properties文件里面的值: Springboot 指定获取自己写的配置properties文件的值 www.jb51.net/article/217899.htm 现在补充多一篇,指定获取yml里面的配置值 . 内容: 这里分别介绍两种方式,都是基于注解实现,分别是: @Value("${xxxxx.xx}") @ConfigurationProperties(prefix = "xxxxx") 进入主题: @Value("${xx

  • Java如何使用ConfigurationProperties获取yml中的配置

    目录 使用ConfigurationProperties获取yml的配置 使用方法 @ConfigurationProperties获取不到配置文件属性值问题 原因就是 使用ConfigurationProperties获取yml的配置 我们在开发过程中,会经常遇到需要自定义配置的场景,比如配置一个ip,一个地址等,并将其写入到yml文件中,在项目中使用@Value("${xxxx.xxxx}")来获取自定义的配置,其实是这样是有些笨重的,每定义一个配置,都需要写一个@Value来获取

  • @Value如何获取yml和properties配置参数

    @Value获取yml和properties配置参数 Yml: #定时任务配置 application: xxl: job: enabled: true admin: addresses: http:///yusp-job-admin/ #127.0.0.1:8080指网关ip:port,yusp-job-admin为调度中心服务名称.通过网关,注册到微服务的/api/server接口,完成注册动作 executor: appname: af_job #执行器名称,要求务必唯一 ip: 10.2

  • 利用Java的MyBatis框架获取MySQL中插入记录时的自增主键

    第一步: 在Mybatis Mapper文件中添加属性"useGeneratedKeys"和"keyProperty",其中keyProperty是Java对象的属性名! <insert id="insert" parameterType="Spares" useGeneratedKeys="true" keyProperty="id"> insert into spares

  • springboot如何获取yml里面的属性值

    目录 如何获取yml里面的属性值 开发环境 项目结构 pom依赖 springboot启动类 person.yml person.java Dog.java SpringbootDemoApplicationTests 控制台输出 获取.yml中自定义参数 通过@Value获取 通过@ConfigurationProperties(prefix = "weixinAndAli")注解 如何获取yml里面的属性值 开发环境 idea jdk1.8 项目结构 pom依赖 <?xml

  • Spring Boot中优雅的获取yml文件工具类

    如何在spring boot中优雅的获取.yml文件工具类呢 代码如下: package com.common.base.utils.base; import com.common.base.generator.ResourceManager; import org.yaml.snakeyaml.Yaml; import java.io.InputStream; import java.util.HashMap; import java.util.Map; /** * yml文件工具类 */ p

  • 在SpringBoot 中从application.yml中获取自定义常量方式

    要注意的地方是 application.yml 中不能用驼峰式写法(systemParams)要改成system-params 方法一: 引入依赖: <!-- 支持 @ConfigurationProperties 注解 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</a

  • Java类获取Spring中bean的5种方式

    获取Spring中的bean有很多种方式,再次总结一下: 第一种:在初始化时保存ApplicationContext对象 ApplicationContext ac = new FileSystemXmlApplicationContext("applicationContext.xml"); ac.getBean("beanId"); 说明:这种方式适用于采用Spring框架的独立应用程序,需要程序通过配置文件手工初始化Spring. 第二种:通过Spring提供

  • Java获取代码中方法参数名信息的方法

    前言 大家都知道随着java8的使用,在相应的方法签名中增加了新的对象Parameter,用于表示特定的参数信息,通过它的getName可以获取相应的参数名.即像在代码中编写的,如命名为username,那么在前台进行传参时,即不需要再编写如@Parameter("username")类的注解,而直接就能进行按名映射. 如下的代码参考所示: public class T { private interface T2 { void method(String username, Stri

  • Android中Java根据文件头获取文件类型的方法

    本文实例讲述了Android中Java根据文件头获取文件类型的方法.分享给大家供大家参考,具体如下: 前面讲过Android系统内部的MediaFile类来获取文件类型的办法,这个类主要是根据文件的扩展名来判断,其准确性不是很好.具体可查看Android系统使用MediaFile类判断音频文件类型.其实,获取文件类型最好的办法便是根据文件头信息来判断.下面贴出相关代码: public class FileType { public static final HashMap<String, Str

  • Java获取彩色图像中的主色彩的实例代码

    本文讲述了Java获取彩色图像中的主色彩的实例代码.分享给大家供大家参考,具体如下: 一:基本思路 对于一张RGB色彩空间的彩色图像,很多时间我们想通过程序获得该图像有几种主要的色彩,但是对一般图像来说,在色彩交界处都是通过像素混合来实现自然过渡,所以直接扫描图像的像素值,得到的不同颜色值可能多达上百中,而实际上图像可能只有3-4种的主要色彩,如何去掉那些混合颜色,准确提取出来这3-4中的主色彩,根据一般图像的特征,图像在不同色彩的边界处混合不同的颜色值,此可以视为图像的边缘特性之一,因此可以根

随机推荐