Spring中动态获取配置文件中的值(properties, 或者yml)

平时我们都习惯用@Value("${"XXXX"}")注解标注在成员变量上来获取,但是如果说没有配置则连系统都启动不了

所以我写了一个工具类可以在程序运行期间动态获取配置文件中的值:

直接上工具类:

package com.zz.amqp1.utils;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.EmbeddedValueResolverAware;
import org.springframework.stereotype.Component;
import org.springframework.util.StringValueResolver;

/**
 * Description: Spring代码形式注入bean
 * User: zhouzhou
 * Date: 2018-09-07
 * Time: 11:36
 */
@Component
public class SpringContextUtil implements ApplicationContextAware ,EmbeddedValueResolverAware {

    private static Logger logger = LoggerFactory.getLogger(SpringContextUtil.class);

    // Spring应用上下文环境
    private static ApplicationContext applicationContext;

    private static StringValueResolver stringValueResolver;

    /**
     * 实现ApplicationContextAware接口的回调方法。设置上下文环境
     *
     * @param applicationContext
     */
    public void setApplicationContext(ApplicationContext applicationContext) {
        SpringContextUtil.applicationContext = applicationContext;
    }

    /**
     * @return ApplicationContext
     */
    public static ApplicationContext getApplicationContext() {
        return applicationContext;
    }

    /**
     * 获取对象
     *
     * @param name
     * @return Object
     * @throws BeansException
     */
    public static Object getBean(String name) throws BeansException {
        return applicationContext.getBean(name);
    }


    /**
     * 动态获取配置文件中的值
     * @param name
     * @return
     */
    public static String getPropertiesValue(String name) {
        try {
            name = "${" + name + "}";
            return stringValueResolver.resolveStringValue(name);
        } catch (Exception e) {
            logger.error(String.format("当前环境变量中没有{%s}的配置", name));
            // 获取失败则返回null
            return null;
        }
    }

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

如何使用呢??

@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringContextUtilTest {

    @Test
    public void test(){
        String userId = SpringContextUtil.getPropertiesValue("userId");
        System.out.println(userId);
    }
}

当我们配置的时候则会打印,让我们分别用有的,和没有的配置文件做测试配置文件如下:

# 测试userId
 userId: 123测试

和空

 

结果如下

你可能感兴趣的:(java实用小工具,Spring)