Spring batch 在FlatFileItemReader自定义bufferedReader实例中检测作业何时停止

Spring batch 在FlatFileItemReader自定义bufferedReader实例中检测作业何时停止,spring-batch,Spring Batch,在使用配置的自定义BufferedFileReaderFactorybean创建的FlatFileItemReader bufferedFileReader中,如何检测何时发出停止作业的信号。此自定义bufferedFileReader跟踪文件并无限期地等待更多输入,因此不会检测到作业停止状态,因为代码在Spring批处理框架之外被阻止 我可以使用Step1->Tasklet->Step1 flow循环来实现这一点,该循环在Tasklet中执行Thread.sleep,但这个不断增长的文件的性质

在使用配置的自定义BufferedFileReaderFactorybean创建的FlatFileItemReader bufferedFileReader中,如何检测何时发出停止作业的信号。此自定义bufferedFileReader跟踪文件并无限期地等待更多输入,因此不会检测到作业停止状态,因为代码在Spring批处理框架之外被阻止

我可以使用Step1->Tasklet->Step1 flow循环来实现这一点,该循环在Tasklet中执行Thread.sleep,但这个不断增长的文件的性质意味着我将每隔几秒钟点击一次EOF,并在数据库中生成大量StepExecution行

公共类TailingBufferedReaderFactory实现BufferedReaderFactory{
@凌驾
公共BufferedReader创建(资源,字符串编码)引发IOException{
返回新的TailingBufferedReader(新的InputStreamReader(resource.getInputStream(),encoding));
}
}
公共类TailingBufferedReader扩展BufferedReader实现JobExecutionListener{
私人作业执行作业执行;
公共TailingBufferedReader(读取器输入){
超级(in),;
}
@凌驾
公共字符串readLine()引发IOException{
而(!jobExecution.isStopping()){//将执行难以捉摸的作业执行状态检查
var line=super.readLine();
如果(行==null){
线程。睡眠(waitDurationMillis);
继续;
}
回流线;
}
返回null;
}
//理想情况下,在作业中配置类似的内容
@凌驾
作业前公共无效(作业执行作业执行){
this.jobExecution=jobExecution;
}
@凌驾
public void afterJob(JobExecution JobExecution){}
}

我想知道为什么要这样做。这是驱动读者的一个步骤,而不是相反。因此,如果您指示该步骤停止,它将停止读取。读者不知道(也不应该知道)什么时候应该读取或停止读取。目标是为Spring Batch找到一个尾部类型的文件读取解决方案。我试图使BufferedReader短路,因为它正在等待一段延长的、可能是无限的时间,以便下一行文件准备好读取,以便控件可以返回调用堆栈。