我是Spring的新手。我有一個作業讀取文件並寫入數據庫。如果文件中的記錄數超過8000個,我不應該處理該文件,並且應該停止作業執行。請建議什麼是更好的方法來做到這一點。如何在春季批次中的文件中獲取行數在條目閱讀器中
回答
我假設您的文件中的記錄不是固定的長度。如果是這樣,File.length()將輕鬆計算文件中的記錄數。
如果不是,它是否需要正好8000或8000左右?如果這是一個粗略的限制,我會得到這些文件的平均記錄長度,然後使用File.length()來估計記錄數。
不是特定於春天的東西,但java.io
中有一個類LineNumberReader
。你可以使用它和它的skip
方法來跳過大量的字符。
實施例:
public int getNoOfLines(String fileName) {
LineNumberReader reader = new LineNumberReader(new FileReader(fileName));
reader.skip(Integer.MAX_VALUE); //skips those many chars, if you feel your file size may exceed you can use Long.MAX_VALUE
return reader.getLineNumber();
}
這不僅僅是讀取文件及數量高效。
謝謝你的回答。我正在嘗試爲我的工作實施父級步驟,在那裏我將確定行數以及如何在父級步驟完成後停止工作。 – user3217014
如果您可以在父步驟中獲得該文件,則可以調用上述方法並知道該文件中的行數 –
您可以在itemreader上實現StepExecutionListener。然後你可以得到與你的線路號碼相對應的讀數。
public class ExampleItemReader implements ItemReader<String>, StepExecutionListener {
public synchronized String read() throws Exception {
return "";
}
@Override
public ExitStatus afterStep(StepExecution executionContext) {
if (executionContext.getReadCount() > 8000) {
return ExitStatus.COMPLETED;
}
return ExitStatus.EXECUTING;
}
@Override
public void beforeStep(StepExecution arg0) {
}
}
這不完全是OP要的,因爲此解決方案處理該文件,並且OP想要放棄所有記錄計數> 8K!使用解決方案(無需更快計數記錄的技巧)可能更適合創建前一步驟,請檢查8K條件(只讀取記錄,無需寫入),並在使用[JobExecutionDecider'](httpd://docs.spring。 io/spring-batch/apidocs/org/springframework/batch/core/job/flow/JobExecutionDecider.html)來檢查工作是否需要繼續或完成(這應該會使工作流程更清潔) –
嗯,你是對的。如果一個進程對於超過8K行的文件不是必需的,則前面的步驟會更好。 – nsylmz
- 1. 春季批次中的存儲過程條目閱讀器版本
- 2. 空值在我的自定義閱讀器在春季批次
- 3. 如何在春季批次ItemWriter中獲取jobId
- 4. 如何在春季批次中計算Tasket中的項目?
- 5. 春季批次和春季批次管理項目
- 6. 春季批次:條件流程
- 7. 春季屬性閱讀器
- 8. 春季批次:多個項目讀者在一個步驟
- 9. 春季批次中的XA交易
- 10. 春季批次中的多線程
- 11. 春季集成文件閱讀
- 12. 閱讀安卓春季攔截器中的響應正文
- 13. 春季集成從動態多個目錄中讀取文件
- 14. 春季IoC容器中的條件
- 15. 如何在春季批量編寫自定義物品閱讀器
- 16. 春季批量自定義項目讀取器IllegalArgumentException
- 17. 如何在一個hdf5數據文件中讀取批次進行培訓?
- 18. 春季批次:讀取文件:如果字段爲空設置默認值
- 19. 一次在多個文件中批量讀取R讀取
- 20. 從春季批次中提取不同數據庫表中的數據
- 21. 如何在春季集成中獲取發件人IP地址?
- 22. 如何獲取文件逐行閱讀
- 23. 如何在春季批次中爲每個作業實例啓動編寫器
- 24. 春季批量mongo物品閱讀器不會重新啓動
- 25. 不同的行爲在春季讀取屬性文件
- 26. 春季開機春季批量:如何動態設置查詢項目讀取器
- 27. 關於春季批次
- 28. 什麼是春季批次?
- 29. 春季Kafka Listner |閱讀
- 30. 春季批次的批量作業
我想實現有條件的一步,但不知道如何配置代碼。 – user3217014