zoukankan      html  css  js  c++  java
  • 关于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注解来读取相关属性就解决了。

  • 相关阅读:
    利用深度学习网络自动给图像上色的文章和相关工程实现
    Perceptual Losses for Real-Time Style Transfer and Super-Resolution and Super-Resolution 论文笔记
    (转) Dissecting Reinforcement Learning-Part.2
    (转) 多模态机器翻译
    编译caffe的Python借口,提示:ImportError: dynamic module does not define module export function (PyInit__caffe)
    (转)How Hash Algorithms Work
    深度学习 目标检测算法 SSD 论文简介
    (转)能根据文字生成图片的 GAN,深度学习领域的又一新星
    (转) Face-Resources
    (转) AdversarialNetsPapers
  • 原文地址:https://www.cnblogs.com/Oliver-rebirth/p/springboot_config.html
Copyright © 2011-2022 走看看