关于springboot配置文件的另类读取方法

一、背景故事

   前阵子我接手了公司另外一个同事手里的项目,项目是用的springboot 写的,但是比较坑的就是这个项目写的有点不伦不类。虽然是用的springboot,但由于他是拿了一堆代码拼凑起来的,估计他没去研究springboot的常规设置,所以用了一个很直接的办法,把所有配置信息都塞到application.properties文件里面,然后不同环境的配置文件用起来每次都把application文件覆盖掉。然后在代码里载入application.properties文件,来作为读取配置文件的公共静态方法。

  我刚接手代码的时候只是发现配置文件各种混乱,也没多想,上来就把配置文件全部整理了一遍。整理完后,我就尝试启动服务,发现各种报错,配置文件读取错误。我一惊,翻了代码才发现上面说的大坑。那么下面我就记录下我自己某度了好久,才想到的改动最小的办法。原谅我水平不是太高。

二、代码

  1.首先是原先的读取配置文件的公共方法。

public class ConfigUtil {
    /**
     * 日志.
     */
    private static Logger logger = Logger.getLogger(ConfigUtil.class);

    // 初始化配置文件
    private static Properties pro = new Properties();
    static {
        final Resource resource = new ClassPathResource(
                "/META-INF/properties/application.properties");
        InputStream ips = null;
        try {
            ips = resource.getInputStream();
            pro.load(ips);
        } catch (final IOException e) {
            logger.info(e.getMessage());
        } finally {// QKX 20131223关闭输入流
            try {
                if (ips != null) {
                    ips.close();
                }
            } catch (final IOException e) {
                logger.info(e.getMessage());
            }

        }
    }

    // 获取配置文件的中配置的值
    public static String getValue(final String key) {
        return pro.getProperty(key).trim();
    }
}
View Code

  这样的问题就在于我把配置文件拆成这种形式的时候,他还是只能读取到application.properties中的属性,读取不了其他的。

  

  2.由于项目已经上过线了,所以想尽量少改动,所以我就思考只改这个公共方法,不要动其他业务的代码。于是就变成了下面的样子。

@Component
public class ConfigUtil {

    @Autowired
    private Environment env;

    private static Environment staticEnv;

    @PostConstruct
    public void init() {

        staticEnv = env;
    }

    // 获取配置文件的中配置的值
    public static String getValue(final String key) {

        return staticEnv.getProperty(key).trim();
    }
}
View Code

  3.这样确实能够读取配置文件,但是有一个问题,就是在这个bean被加载之前,这个方法还是无效的。具体的顺序你们看自己对应的项目,我这里就只有主类中的一些bean和一个队列线程。那么这里我就用@Value注解来读取相关属性就解决了。

原文地址:https://www.cnblogs.com/Oliver-rebirth/p/springboot_config.html