springboot 讀取外部json文件配置類

說明

我們?cè)谶\(yùn)行一個(gè)系統(tǒng)時(shí),不可避免的要加載一些常用的數(shù)據(jù)师郑,如默認(rèn)用戶环葵,各種數(shù)據(jù)枚舉等。
現(xiàn)在流行的方式為配置一個(gè)json文件宝冕,此json文件可以放在外部系統(tǒng)讀取张遭,也可以放入src/main/resources下,讀取的順序可以和 application.yml 文件一樣猬仁。加載優(yōu)先級(jí):外部同級(jí)目錄 > 外部config目錄 > 內(nèi)部 resources下同級(jí)目錄 > 內(nèi)部 resources下config目錄。
其實(shí)是一段函數(shù)控制的:

private static File getResFile(String filename) throws FileNotFoundException {
        File file = new File(filename);
        if (!file.exists()) { // 如果同級(jí)目錄沒有先誉,則去config下面找
            log.debug("不在同級(jí)目錄湿刽,進(jìn)入config目錄查找");
            file = new File("config/"+filename);
        }
        Resource resource = new FileSystemResource(file);
        if (!resource.exists()) { //config目錄下還是找不到,那就直接用classpath下的
            log.debug("不在config目錄褐耳,進(jìn)入classpath目錄查找");
           file = ResourceUtils.getFile("classpath:"+filename);
        }
        return file;
    }

那么具體的實(shí)現(xiàn)json文件的解析類诈闺,就是:

外部依賴

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.51</version>
        </dependency>

JSONHelper.java


@Slf4j
public class JSONHelper {


   /* public static void main(String[] args) {
//        String s =ResolveJsonFileToString("node.json");
//        System.out.println("sss="+s);

//        Map map = (Map) ResolveJsonFileToObject("node.json");
//        System.out.println("map="+map.get("res"));
    }
*/


   /**
   *  將文件流轉(zhuǎn)為json對(duì)象,文件存放路徑與配置文件路徑規(guī)范一致
   * @param
   * @return
   * @throws
   */
    public static Object ResolveJsonFileToObject(String filename){
        String str= ResolveJsonFileToString(filename);
        JSONObject jo = JSONObject.parseObject(str);
        return jo;
    }


    /**
    *  通過文件名獲取獲取json格式字符串铃芦,
    * @param filename 文件存放路徑與配置文件路徑規(guī)范一致
    * @return ResolveJsonFileToString
    * @throws
    */
    public static String ResolveJsonFileToString(String filename){

        BufferedReader br = null;
        String result = null;
        try {

//            br = new BufferedReader(new InputStreamReader(getInputStream(path)));
            br = new BufferedReader(new InputStreamReader(getResFileStream(filename),"UTF-8"));
            StringBuffer message=new StringBuffer();
            String line = null;
            while((line = br.readLine()) != null) {
                message.append(line);
            }
            if (br != null) {
                br.close();
            }
            String defaultString=message.toString();
            result=defaultString.replace("\r\n", "").replaceAll(" +", "");
            log.info("result={}",result);

        } catch (IOException e) {
            try {
                ClassLoader classloader = Thread.currentThread().getContextClassLoader();
                InputStream in = classloader.getResourceAsStream(filename);
                br = new BufferedReader(new InputStreamReader(in,"UTF-8"));
                StringBuffer message=new StringBuffer();
                String line = null;
                while((line = br.readLine()) != null) {
                    message.append(line);
                }
                if (br != null) {
                    br.close();
                }
                if (in != null){
                    in.close();
                }
                String defaultString=message.toString();
                result=defaultString.replace("\r\n", "").replaceAll(" +", "");
                log.debug("for jar result={}",result);
            }catch (Exception e1){
                e1.printStackTrace();
            }

        }

        return result;
    }



    private static File getResFile(String filename) throws FileNotFoundException {
        File file = new File(filename);
        if (!file.exists()) { // 如果同級(jí)目錄沒有雅镊,則去config下面找
            log.debug("不在同級(jí)目錄,進(jìn)入config目錄查找");
            file = new File("config/"+filename);
        }
        Resource resource = new FileSystemResource(file);
        if (!resource.exists()) { //config目錄下還是找不到刃滓,那就直接用classpath下的
            log.debug("不在config目錄仁烹,進(jìn)入classpath目錄查找");
           file = ResourceUtils.getFile("classpath:"+filename);
        }
        return file;
    }

    /**
    *  通過文件名獲取classpath路徑下的文件流
    * @param
    * @return
    * @throws
    */
    private static FileInputStream getResFileStream(String filename) throws FileNotFoundException {
        FileInputStream fin = null;
        File file = getResFile(filename);
        log.info("getResFile path={}",file);
        fin = new FileInputStream(file);
        return fin;
    }

}

更多,請(qǐng)關(guān)注:
springboot 技術(shù)實(shí)踐總結(jié)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末咧虎,一起剝皮案震驚了整個(gè)濱河市卓缰,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌砰诵,老刑警劉巖征唬,帶你破解...
    沈念sama閱讀 217,657評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異茁彭,居然都是意外死亡总寒,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門理肺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來摄闸,“玉大人,你說我怎么就攤上這事妹萨√靶剑” “怎么了?”我有些...
    開封第一講書人閱讀 164,057評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵眠副,是天一觀的道長画切。 經(jīng)常有香客問我,道長囱怕,這世上最難降的妖魔是什么霍弹? 我笑而不...
    開封第一講書人閱讀 58,509評(píng)論 1 293
  • 正文 為了忘掉前任毫别,我火速辦了婚禮,結(jié)果婚禮上典格,老公的妹妹穿的比我還像新娘岛宦。我一直安慰自己,他們只是感情好耍缴,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評(píng)論 6 392
  • 文/花漫 我一把揭開白布砾肺。 她就那樣靜靜地躺著,像睡著了一般防嗡。 火紅的嫁衣襯著肌膚如雪变汪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,443評(píng)論 1 302
  • 那天蚁趁,我揣著相機(jī)與錄音裙盾,去河邊找鬼。 笑死他嫡,一個(gè)胖子當(dāng)著我的面吹牛番官,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播钢属,決...
    沈念sama閱讀 40,251評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼徘熔,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了淆党?” 一聲冷哼從身側(cè)響起近顷,我...
    開封第一講書人閱讀 39,129評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎宁否,沒想到半個(gè)月后窒升,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,561評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡慕匠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評(píng)論 3 335
  • 正文 我和宋清朗相戀三年饱须,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片台谊。...
    茶點(diǎn)故事閱讀 39,902評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蓉媳,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出锅铅,到底是詐尸還是另有隱情酪呻,我是刑警寧澤,帶...
    沈念sama閱讀 35,621評(píng)論 5 345
  • 正文 年R本政府宣布盐须,位于F島的核電站玩荠,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜阶冈,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評(píng)論 3 328
  • 文/蒙蒙 一闷尿、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧女坑,春花似錦填具、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至碉就,卻和暖如春盟广,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背铝噩。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評(píng)論 1 269
  • 我被黑心中介騙來泰國打工衡蚂, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留窿克,地道東北人骏庸。 一個(gè)月前我還...
    沈念sama閱讀 48,025評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像年叮,于是被迫代替她去往敵國和親具被。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容