我是Spring的新手。我有一个Job,它读取文件并写入数据库。如果文件中的记录数超过8000,我不应该处理该文件,并且应该停止作业执行。请建议更好的方法是什么。
答案 0 :(得分:2)
您可以在itemreader上实现StepExecutionListener。然后你可以获得与你的行号相对应的readcount。
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) {
}
}
答案 1 :(得分:1)
不是特定于春天的东西,但LineNumberReader
中有一个班级java.io
。您可以使用它及其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();
}
这比读取文件和计数更有效。
答案 2 :(得分:0)
我假设您文件中的记录不是固定长度。如果是这样,File.length()将很容易计算文件中的记录数。
如果没有,它需要精确到8000还是大约8000?如果这是一个粗略的限制,我将得到这些文件的平均记录长度,然后使用File.length()来估计记录的数量。