熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

Neptune任務構建系統的實例

2022-06-13   來源: Java核心技術 

  最近公司有一個需求發現用neptune實現起來非常清新爽潔不緊繃

  需求是這樣


需要從某公司下載大量的數據文件
一共有十八種不同的文件比如CustomerCompany StockIndex等等
月一直到現在每個工作日都有數據文件下載周末沒有
對某一天比如//的Customer文件url的格式是
開始需要把所有歷史文件下載下來
然後每天都持續下載新文件
在給定的某一天不一定每個文件都有有時候Customer沒有或者Company沒有理論上可以每個文件都沒有
下載下來的文件需要unzipunzip出來的會是一個csv文件
這個csv文件需要被輸入到數據庫中的對應表中這一天的日期也要存在這個表裡作為一個列也就是說Customer Company這些表除了有這些數據文件裡面的每一個field之外還有一個date列來表示這個紀錄是哪一天的

  下面是一些思考


    因為一個文件可能也可能不存在所以這個文件不存在不能讓整個流程停下來文件不存在我們需要停止接下來的對這個文件的解壓和導入數據庫但是不能中斷其他文件的下載
    因為從別的公司下載也無法保證敵人給我們的文件永遠格式正確如果萬一解壓失敗或者導入數據庫失敗也能終端整個任務
    文件需要下載到本地目錄裡面因為不同日期的文件名字一樣所以我們本地也可以構建一個yyyy/mm/dd格式的目錄樹
    一個一個文件下載解壓導入非常沒有效率也許敵人的網絡很慢這樣整個任務就會持續太長時間最好的辦法是能夠並行同時處理多個文件
    持續更新的時候不能簡單地只使用當前日期因為也許因為某些原因前一天的某個文件沒有及時更新或者下載失敗了之類的為了保證程序的健壯性我們最好是從數據庫讀取最新日期那一天的下一天就是我們要開始處理的日期
    下載解壓調用數據庫這些基本動作都可以用ant的任務來實現
    導入數據庫我們用一個存儲過程實現

  好下面讓我們從頭構建這個任務

  下載



  download srcfile zipfile = antget{src=srcfiledest=zipfileusername=myuser

  password=mypwdusetimestamp=trueverbose=false};

  解壓



  unzip zipfile destdir = antunzip{src=zipfile dest=destdir};

  導入數據庫



  importFile date name = antsql(db_connection)with[ exec loadDataFile ${destdir} ${datestr} ${name} ] where datestr = datepath date; destdir = $csvroot/$datestr; end;

  導入數據庫這一步用到了幾個輔助函數和變量


datepath函數負責把一個javautilDate對象轉換成yyyy/MM/dd格式的字符串它使用jaskell的內建函數format

  datepath date = jaskelldatesformat{pattern=yyyy/MM/dd} date;


db_connection是一個儲存著所有數據庫連接相關信息的對象
csvroot是儲存所有csv文件的根目錄
From:http://tw.wingwit.com/Article/program/Java/hx/201311/26191.html
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.