摘要:措施將解析功能模塊化,獨立于業務流程利用的加載器,加載外部腳本該腳本放在數據庫中類圖說明功能觸發后目前為定時任務驅動,從配置表獲取需要解析的對象信息,根據配置選擇相應的解析器實現類接口實現解析文件的功能。
起因
項目上有用到文件解析的功能,一個txt對賬文件,逐行讀取數據并處理落庫。不同的渠道,其文件內容、格式等差異可能較大,落庫及后續處理方式也或許不同。雖然目前使用了策略模式以求保持流暢上的一致,但每次新加的代碼量還是頗多。
措施將解析功能模塊化,獨立于業務流程
利用Groovy的加載器,加載外部腳本(該腳本放在數據庫中)
功能觸發后(目前為定時任務驅動),從配置表獲取需要解析的對象信息FileParserConfig,根據配置選擇相應的解析器實現類
FileParserService接口實現解析文件的功能。
AbstractFileParserService為抽象實現類,處理需逐行解析的文件
@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);) { ListbufferList = 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為實現類,實現saveDetail方法,控制Dao操作(此處基于Dao層予以提供實現類)
ParserScriptEngine加載Groovy腳本,腳本需要實現接口FileParser
return (FileParser) groovyClassLoader.parseClass(script).newInstance();
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/67935.html
摘要:動態腳本支持框架之腳本加載執行上一篇簡答說了如何判斷有任務動態添加刪除或更新,歸于一點就是監聽文件的變化,判斷目錄下的文件是否有新增刪除和改變,從而判定是否有任務的變更接下來的問題就比較明顯了,當任務變更之后,就需要重新加載任務了,即如何 showImg(https://segmentfault.com/img/remote/1460000015923148); Quick-Task ...
摘要:實現這個口號的就是可以運行在不同平臺上的虛擬機和與平臺無關的字節碼。類加載過程加載加載是類加載的第一個階段,虛擬機要完成以下三個過程通過類的全限定名獲取定義此類的二進制字節流。驗證目的是確保文件字節流信息符合虛擬機的要求。 引言 我們知道java代碼編譯后生成的是字節碼,那虛擬機是如何加載這些class字節碼文件的呢?加載之后又是如何進行方法調用的呢? 一 類文件結構 無關性基石 ja...
摘要:什么是字節碼程序通過編譯之后生成文件就是字節碼集合正是有這樣一種中間碼字節碼,使得等函數語言只用實現一個編譯器即可運行在上。 什么是字節碼? java程序通過javac編譯之后生成文件.class就是字節碼集合,正是有這樣一種中間碼(字節碼),使得scala/groovy/clojure等函數語言只用實現一個編譯器即可運行在JVM上??纯匆欢魏唵未a。 public long ...
閱讀 2760·2021-09-24 10:34
閱讀 1862·2021-09-22 10:02
閱讀 2252·2021-09-09 09:33
閱讀 1458·2021-08-13 15:02
閱讀 3270·2020-12-03 17:10
閱讀 1180·2019-08-30 15:44
閱讀 2144·2019-08-30 12:58
閱讀 3229·2019-08-26 13:40