静态方法获取配置文件的属性(坑)

news/2024/7/24 9:08:07

这里介绍的是用 加载Properties流实现 springboot在静态方法中读取xxx.properties配置文件属性

没有用spring Bean注入方法实现的原因:项目中有个特殊的静态方法需要在很靠前的时候执行并且需要用到一些配置属性,尝试了用 spring @Value注入的各种方法,由于该静态方法执行非常靠前,而通过spring 读取注入的配置类还没有加载,最终都是在静态方法中无法获取到xxx.properties配置属性。

package com.xyq.utils;


import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Properties;

/**
 * @author 贾宇光
 * @version 1.0
 * @date 2020/7/27 16:13
 */
public class GetParameters {

    /**
     * 读取 classpath 下 指定的properties配置文件,加载到Properties并返回Properties
     *
     * @param name 配置文件名,如:mongo.properties
     * @return
     */
    public static Properties getConfig(String name) {
        Properties props = null;
        try {
            props = new Properties();
            InputStream in = GetParameters.class.getClassLoader().getResourceAsStream(name);
            BufferedReader bf = new BufferedReader(new InputStreamReader(in));
            props.load(bf);
            in.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return props;
    }

    public static String getPropValue(Properties prop, String key) {
        if (key == null || "".equals(key.trim())) {
            return null;
        }
        String value = prop.getProperty(key);
        if (value == null) {
            return null;
        }
        value = value.trim();
        //判断是否是环境变量配置属性,例如 server.env=${serverEnv:local}
        if (value.startsWith("${") && value.endsWith("}") && value.contains(":")) {
            int indexOfColon = value.indexOf(":");
            String envName = value.substring(2, indexOfColon);
            //获取系统环境变量 envName 的内容,如果没有找到,则返回defaultValue
            String envValue = System.getenv(envName);
            if (envValue == null) {
                //配置的默认值
                return value.substring(indexOfColon + 1, value.length() - 1);
            }
            return envValue;
        }
        return value;
    }
}

使用:

        Properties prop = GetParameters.getConfig("mongo-pool.properties");
        //
        System.out.println(prop.getProperty("spring.data.mongodb.database"));

        //建议采用下面这种获取方法,能够处理 环境变量配置属性 例如 server.env=${serverEnv:local}
        System.out.println(GetParameters.getPropValue(prop, "spring.data.mongodb.database"));

 


http://www.niftyadmin.cn/n/731703.html

相关文章

axure 鼠标变成手_鼠标越轻越好?什么人应该选择轻量化鼠标?

我先和你讲一下鼠标轻量化这一趋势是这么来的。一切的一切都要从《Fortnite(堡垒之夜)》开始说起,作为一款吃鸡游戏,凭借搭建掩体在一个真正意义上立体的地图进行对战。堡垒之夜有一种快速搭建掩体的要求,在2s不到的时…

Rest微服务构建

SpringCloud版本选择 Spring BootSpring Cloud关系1.2.xAngel版本 (天使)兼容Spring Boot 1.2.x1.3.xBrixton版本 (布里克斯顿)兼容Spring Boot 1.3.x,也兼容Spring Boot 1.4.x1.4.xCamden版本 (卡姆登)兼容Spring Boot 1.4.x,也兼容Spring Boot 1.5.x1…

python会自动保存吗_python自动保存文件失败

展开全部代码应该没问题,需要确保target_dir存在。如果运行失败,zip应该也有输出,e5a48de588b662616964757a686964616f31333361306430可以一起贴出来。下面是我的测试结果(为了测试,目录有所区别,并使用os.makedirs保证…

uploadify上传无反应_取证实战—Hacker利用某类网站的文件上传漏洞批量渗透

下面讲的会是一个比较有趣的故事,某类Web网站系统因为存在文件上传漏洞,文件包含漏洞,被Hacker利用后进行了批量的渗透,造成一大部分网站的后台被植入后门,对相关企事业单位造成不良影响。0x01概述其实,这个…

Eureka 集群环境

集群环境配置 新建工程springcloud-eureka-7002、springcloud-eureka-7003 按照7001为模板粘贴POM 修改7002和7003的主启动类 修改映射配置 , windows域名映射 集群配置分析 修改3个EurekaServer的yaml文件夹 7001: server:port: 7001 #Eureka配置 eureka:ins…

python 自动化输入登录密码_selenium+python实现自动登录脚本

os:windows前提:Python,selenium,IEDriverServer.exe,ie浏览器首先安装Python2.7安装成功后,计算机联网状态下在cmd命令行下输入:pip install -U seleniumselenium安装后,在selenium…

插入排序c语言_C语言递归实现插入排序

一、什么是插入排序插入排序通俗来讲就是往一个已经排好序的序列中插入一个元素。在插入的过程中从序列尾部开始,一直往前比较,直到找到合适的位置才停止比较,最终将元素插入,可以从下图理解。二、for循环实现插入排序// 最好时间…

均值定理最大值最小值公式_显示最大/最小/平均值的组合excel图表

为了加强图表的直观性和说服力,可以在图表上自动标识出某些特殊数据,而不是手工添加一些自选图形来进行说明。此时,就需要绘制描述特殊数据点的组合图表,例如显示最大/最小/平均值的组合excel图表,显示低于/高于目标值…