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

 更新时间:2022年02月17日 09:46:43   作者:风雪留客  
这篇文章主要介绍了Java如何使用ConfigurationProperties获取yml中的配置,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

使用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方法也定义为了静态方法。

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

相关文章

  • SpringBoot自动装配原理小结

    SpringBoot自动装配原理小结

    Spring Boot主要作用就是简化Spring应用的开发,开发者只需要通过少量代码就可以创建一个Spring应用,而达到这一目的最核心的思想就是约定优于配置。
    2021-05-05
  • 详解Java Fibonacci Search斐波那契搜索算法代码实现

    详解Java Fibonacci Search斐波那契搜索算法代码实现

    这篇文章主要介绍了详解Java Fibonacci Search斐波那契搜索算法代码实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • Java的Tomcat和Servlet的运行原理详解

    Java的Tomcat和Servlet的运行原理详解

    这篇文章主要为大家详细介绍了Java的Tomcat和Servlet,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • java Spring Boot 配置redis pom文件操作

    java Spring Boot 配置redis pom文件操作

    这篇文章主要介绍了java Spring Boot 配置redis pom文件操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-07-07
  • java常见log日志的使用方法解析

    java常见log日志的使用方法解析

    本文主要介绍了java常见log日志的使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • Java生成中间logo的二维码的示例代码

    Java生成中间logo的二维码的示例代码

    这篇文章主要介绍了Java如何生成中间logo的二维码,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07
  • SpringBoot过滤器实现项目内接口过滤详解

    SpringBoot过滤器实现项目内接口过滤详解

    这篇文章主要为大家详细介绍了SpringBoot如何利用过滤器实现项目内接口过滤,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起了解一下
    2023-04-04
  • 详解使用spring aop实现业务层mysql 读写分离

    详解使用spring aop实现业务层mysql 读写分离

    本篇文章主要介绍了使用spring aop实现业务层mysql 读写分离,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • 使用Post方法模拟登陆爬取网页的实现方法

    使用Post方法模拟登陆爬取网页的实现方法

    下面小编就为大家带来一篇使用Post方法模拟登陆爬取网页的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • Java常用加密算法实例总结

    Java常用加密算法实例总结

    这篇文章主要介绍了Java常用加密算法,结合实例形式总结分析了base64、md5、sha、rsa、des等加密算法实现技巧,需要的朋友可以参考下
    2017-10-10

最新评论