mule in action翻譯14 : 3.2 使用檔案傳輸
讀寫檔案是應用程式擷取或寫出資料最常用的方式。
本節學習如何使用mule的檔案傳輸實作讀、寫、移動、删除的操作。
配置屬性 本書中你會看到如下的屬性配置:
host="${imap.host}"
這些屬性占位符是為了避免寫死。屬性檔案的位置的配置如下:
<context:property-placeholder location="/mule.properties"/>
檔案傳輸的一些配置屬性如表 3.1 所示。
一些Prancing Donkey公司的員工還在使用Excel記錄支出。這對公司的公司的開發人員是個 特别沮喪的事情,他們本想享受Arnor Accounting REST風格 API帶來便利。但更糟糕的是, 員工一直是把報帳單電郵到會計部門。 會計部門人員則疲于過濾郵件中的報帳單附件, 找到這些報帳單後還要放到一個網絡共享目錄。此外還有一個問題,報帳單命名并不統一。
我們來看一個流,它可以輪詢接受報帳單的檔案夾,并會把不符合命名規範的報帳單複制到另外
一個檔案夾。見圖 3.5
Listing 3.1 Using the file transport to move files from one directory to another
<flow name="copyExpenseReports">
<--!注釋1 每分鐘一次輪詢檔案夾 ./data/expenses/1/in 查找新檔案-->
<file:inbound-endpoint path="./data/expenses/1/in" pollingFrequency="60000">
<--!注釋2 隻接受字尾是 .xls擴充名的檔案-->
<file:filename-regex-filter pattern=".*xls$" caseSensitive="false"/>
</file:inbound-endpoint>
<--!注釋3 把檔案寫到/data/expenses/out 把新檔案命名為時間戳加上原檔案名-->
<file:outbound-endpoint path="./data/expenses/out"
outputPattern="EXPENSE-REPORT-
#[org.mule.util.DateUtils.getTimeStamp('dd-MM-yy_HH-mm-ss.SSS')]
-#[inboundProperties['originalFilename']]"/>
</flow>
這個流的消息源是一個 檔案 inbound endpoint ,
注釋1處是輪詢檔案夾 /data/expenses/1/in以發現新檔案,頻率是每分鐘一次。
注釋2處 定義了一個filename-regex-filter,指定endpoint隻接收字尾名為.xml 的檔案,并會忽略大小寫。
注釋3處,outbound endpoint 格式化檔案名為時間戳加上原檔案名。
為了得到後者你引用了originalFilename--這是由inbound endpoint填充進去的。
預設情況下,一個檔案inbound endpoint向outbound endpoint傳送檔案時會在源檔案夾把檔案剪切掉。
可以通過設定檔案 連接配接器的 autoDelete屬性為false來改變這種預設行為。
但要小心,這回導緻inbound endpoint 重複讀取檔案,直至檔案被從源檔案夾總删掉。
fileAge參數允許你讀取檔案存在時長超過某毫秒的檔案。例如 設定為 5000 ,将導緻檔案inbound endpoint隻處理 檔案存在時長超過5分鐘的檔案。
多個mule節點輪詢同一個共享檔案系統
第8章你将看到 把同一個mule應用部署到多個mule執行個體中。這種場景下必須要小心,需要協調多個節點的
狀态,避免發生同時讀、删、移動檔案。 mule企業版的的叢集功能将會自動的協調和分散開mule應用對
檔案傳輸的使用。