2016-11-29 149 views
1

在駱駝後重命名文件,有沒有辦法重命名的設定時間後一個文件,使用Timer組件和Spring配置,如果該文件已經存在?駱駝定時器

難道只有通過具有調用Java方法,將文件重命名爲一個定時器路線實現的?

所以,我有一個套接字,我想從中拉數據。數據每天都在流動。因此,我不只是想將數據路由到一個特定的文件。

所以我的思維過程導致我剛剛改名的時間X時間後現有的文件,並讓Netty的路徑創建一個新的文件,因爲它不會重命名後不復存在。

我有類似的路線:

<route customId="true" id="socketToFileRoute"> 
    <from uri="netty4:tcp://localhost:9999?clientMode=true&amp;textline=true" /> 
    <transform> 
     <simple>${in.body}\n</simple> 
    </transform> 
    <to uri="file://data?fileName=socketData.txt&amp;charset=utf-8&amp;fileExist=Append"/> 
</route> 

有沒有辦法來設置的線沿線的一個計時器路線的追隨?:

<route customId="true" id="dataFileRenamer"> 
    <from uri="timer://renameFile?fixedRate=true&amp;period=50"/> 
    <to uri="file://data/socketData.txt?rename the file created in the previous route" /> 
</route> 

回答

1

你並不需要一個定時器或任何複雜的,你應該只使用toD (Dynamic To endpoint)

<route customId="true" id="socketToFileRoute"> 
    <from uri="netty4:tcp://localhost:9999?clientMode=true&amp;textline=true" /> 
    <transform> 
     <simple>${in.body}\n</simple> 
    </transform> 
    <toD uri="file://data?fileName=socketData-${date:now:yyyyMMddHHmmss}.txt&amp;charset=utf-8&amp;fileExist=Append"/> 
</route> 

這將動態地解析端點的每封郵件,導致一個新的文件生成每一秒,或任何你想使用的時期。

+1

這就是我最終解決的確切解決方案。也許我應該發佈的答案,而不是隻寫在評論哈哈。另外,我沒有得到'toD'端點,一個普通的'to'對我來說工作得很好 – Jsmith

+0

是的,如果你自己找到了可以接受的答案,你應該總是這樣做;你現在也可以這樣做,你只需要等待48小時才能接受它。 –

1

您不能重命名的文件,在至少不是我所知道的。您可以通過計時器節點通過使用.enrich()語法讀取現有文件的內容來豐富您的路由,然後使用新的時間戳創建一個新文件。一個簡單的例子:

.from("timer://renameFile?fixedRate=true&period=50") 
.enrich("file://pathtofile?fileName=<filename>") 
.to("file://pathtofile?fileName=${file:name.noext}-${date:now:yyyyMMdd-HHmmss}.${file:ext}"); 

沿着這些線的東西。當然,這意味着你爲每個週期生成一個新文件。如果你真的想重命名,那麼我想你將不得不創建一個處理器類,並使用標準的Java API來查看是否可以使用並重命名它。

+0

我不知道我明白。你是說用這種方式使用'enrich'會將舊文件('socketData.txt')的主體寫入一個新文件('fileName = newFile.txt'是否是正確的方法?),然後我可以重新命名該新文件?但原始文件('socketData.txt')將繼續寫入?也許我在春季得到的語法錯誤,但我似乎無法做到這一點。 – Jsmith

+0

是的,您將在豐富時根據內容創建新文件。舊文件仍將被寫入。如果你真的想重命名舊的你需要創建一個bean或一個處理器類,並使用普通的java api來進行重命名。 –

+0

我還沒有這個功能,但我確實相信這不是我正在尋找的,我將不得不使用Java選項。我的問題是我需要將最新的條目放入原始文件進行處理,所以我不會一遍又一遍地處理舊數據。所以我不能只重複使用原始文件的正文! – Jsmith