關於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注解來讀取相關屬性就解決了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM