成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

利用Groovy加載器動(dòng)態(tài)實(shí)現(xiàn)文件解析

siberiawolf / 1797人閱讀

摘要:措施將解析功能模塊化,獨(dú)立于業(yè)務(wù)流程利用的加載器,加載外部腳本該腳本放在數(shù)據(jù)庫中類圖說明功能觸發(fā)后目前為定時(shí)任務(wù)驅(qū)動(dòng),從配置表獲取需要解析的對(duì)象信息,根據(jù)配置選擇相應(yīng)的解析器實(shí)現(xiàn)類接口實(shí)現(xiàn)解析文件的功能。

起因

項(xiàng)目上有用到文件解析的功能,一個(gè)txt對(duì)賬文件,逐行讀取數(shù)據(jù)并處理落庫。不同的渠道,其文件內(nèi)容、格式等差異可能較大,落庫及后續(xù)處理方式也或許不同。雖然目前使用了策略模式以求保持流暢上的一致,但每次新加的代碼量還是頗多。

措施

將解析功能模塊化,獨(dú)立于業(yè)務(wù)流程
利用Groovy的加載器,加載外部腳本(該腳本放在數(shù)據(jù)庫中)

類圖

說明

功能觸發(fā)后(目前為定時(shí)任務(wù)驅(qū)動(dòng)),從配置表獲取需要解析的對(duì)象信息FileParserConfig,根據(jù)配置選擇相應(yīng)的解析器實(shí)現(xiàn)類

FileParserService接口實(shí)現(xiàn)解析文件的功能。

AbstractFileParserService為抽象實(shí)現(xiàn)類,處理需逐行解析的文件

@Override
public void parserFile(FileParserConfig config) throws Exception {
    try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream(config.getSourceFile()));
        BufferedReader in = new BufferedReader(new InputStreamReader(bis, "GBK"), 100 * 1024 * 1024);) {
        List bufferList = new ArrayList<>(8092);

        FileParser parser = parserScriptEngine.loadScriptParserByKey(config.getTradeType(), config.getFundChannel(),
                config.getExtraType());
        while (in.ready()) {
            String line = in.readLine();

            FileParserDetail bill = parser.parserFile(line);
            if (bufferList.size() == 8092) {
                this.saveDetail(bufferList);
                bufferList = new ArrayList<>(8092);
            }
            bufferList.add(bill);
        }

        this.saveDetail(bufferList);
    }
}

A-ChannelFileParserServiceImpl為實(shí)現(xiàn)類,實(shí)現(xiàn)saveDetail方法,控制Dao操作(此處基于Dao層予以提供實(shí)現(xiàn)類)

ParserScriptEngine加載Groovy腳本,腳本需要實(shí)現(xiàn)接口FileParser

return (FileParser) groovyClassLoader.parseClass(script).newInstance();

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/67935.html

相關(guān)文章

  • 180807-Quick-Task 動(dòng)態(tài)腳本支持框架之Groovy腳本加載執(zhí)行

    摘要:動(dòng)態(tài)腳本支持框架之腳本加載執(zhí)行上一篇簡(jiǎn)答說了如何判斷有任務(wù)動(dòng)態(tài)添加刪除或更新,歸于一點(diǎn)就是監(jiān)聽文件的變化,判斷目錄下的文件是否有新增刪除和改變,從而判定是否有任務(wù)的變更接下來的問題就比較明顯了,當(dāng)任務(wù)變更之后,就需要重新加載任務(wù)了,即如何 showImg(https://segmentfault.com/img/remote/1460000015923148); Quick-Task ...

    suemi 評(píng)論0 收藏0
  • JAVA 虛擬機(jī)類加載機(jī)制和字節(jié)碼執(zhí)行引擎

    摘要:實(shí)現(xiàn)這個(gè)口號(hào)的就是可以運(yùn)行在不同平臺(tái)上的虛擬機(jī)和與平臺(tái)無關(guān)的字節(jié)碼。類加載過程加載加載是類加載的第一個(gè)階段,虛擬機(jī)要完成以下三個(gè)過程通過類的全限定名獲取定義此類的二進(jìn)制字節(jié)流。驗(yàn)證目的是確保文件字節(jié)流信息符合虛擬機(jī)的要求。 引言 我們知道java代碼編譯后生成的是字節(jié)碼,那虛擬機(jī)是如何加載這些class字節(jié)碼文件的呢?加載之后又是如何進(jìn)行方法調(diào)用的呢? 一 類文件結(jié)構(gòu) 無關(guān)性基石 ja...

    RichardXG 評(píng)論0 收藏0
  • 深入字節(jié)碼 -- 計(jì)算方法執(zhí)行時(shí)間

    摘要:什么是字節(jié)碼程序通過編譯之后生成文件就是字節(jié)碼集合正是有這樣一種中間碼字節(jié)碼,使得等函數(shù)語言只用實(shí)現(xiàn)一個(gè)編譯器即可運(yùn)行在上。 什么是字節(jié)碼? java程序通過javac編譯之后生成文件.class就是字節(jié)碼集合,正是有這樣一種中間碼(字節(jié)碼),使得scala/groovy/clojure等函數(shù)語言只用實(shí)現(xiàn)一個(gè)編譯器即可運(yùn)行在JVM上??纯匆欢魏?jiǎn)單代碼。 public long ...

    娣辯孩 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<