获取properties或者yaml配置文件值

在项目中,获取配置文件中的值有如下几种方法:

1.在工具类中获取,写一个工具类,在工具类中指定配置文件名。这种情况网上很多博客都是这种操作,太low,太不灵活,如果存在多环境的配置文件,就不能用该方法。

2.使用@Value(value = "${plum.name}")。可取,使用这这方法前提是所在的类需要增加spring注解。如果需要在工具类或者不添加注解的类中则无法使用该方法。

3.继续使用@Value(value = "${plum.name}")方法,但是需要封装该注解类。(推荐,不分场景,不指定配置文件名)。

首先,我们需要一个获取bean的工具。

package com.example.demo.utils;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;

/**
 * 获取加载在spring中的bean对象
 */
@Component
public class SpringApllicatonContext implements ApplicationContextAware {

    private static ApplicationContext context;

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        context = applicationContext;
    }

    public static ApplicationContext getContext(){
        return context;
    }
}

其次,我们还需要一个获取properties文件的工具类,并把这个类在启动时交给spring管理,该方法将上面提到的方法2进行封装,方便在工具类中不添加注解。

package com.example.demo.utils;

import org.springframework.context.EmbeddedValueResolverAware;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import org.springframework.util.StringValueResolver;

/**
 * 获取配置信息文件工具
 */
@Component
public class PropertiesUtil implements EmbeddedValueResolverAware {

    private StringValueResolver stringValueResolver;

    @Override
    public void setEmbeddedValueResolver(StringValueResolver stringValueResolver) {
        this.stringValueResolver = stringValueResolver;
    }

    /**
     * 获取配置信息
     * @param key 配置文件中key
     * @return
     */
    public String getPropertiesValue(String key){
        if(StringUtils.isEmpty(key)){
            return null;
        }
        StringBuffer buffer = new StringBuffer();
        buffer.append("${")
                .append(key)
                .append("}");
        String value = this.stringValueResolver.resolveStringValue(buffer.toString());
        return value;
    }
}

最后,我们封装一个获取配置信息的工具类

package com.example.demo.utils;

import org.springframework.util.StringUtils;

/**
 * 获取配置文件中配置信息
 */
public class Properties {

    /**
     * 获取PropertiesUtil
     */
    private static PropertiesUtil util = (PropertiesUtil)SpringApllicatonContext.getContext().getBean("propertiesUtil");

    /**
     * 获取配置文件中配置信息
     * @param key 配置文件中key
     * @return
     */
    public static String getProperty(String key){
        return util.getPropertiesValue(key);
    }

    /**
     * 获取配置文件信息,当信息为空,则返回默认值
     * @param key           配置文件中key
     * @param defaultValue  默认值
     * @return String
     */
    public static String  getProperty(String key, String defaultValue){
        String value = util.getPropertiesValue(key);
        return StringUtils.isEmpty(value) ? defaultValue : value;
    }

}

完成。

即可使用这种方式进行获取

Properties.getProperty("name");

 

你可能感兴趣的:(工具类)