我建议采用不同的方法,因为从我的角度来看,你试图以一种不计划工作的方式使用 spring 批 .
按块处理数据块,并使用FlatFileItemWriter将每个块写入csv .
使用将其标记为临时文件的文件名 .
使用侦听器包裹您的步骤并使用OnProcessError挂钩 .
当遇到OnProcessError时,记录失败的项目
为成功和失败添加条件流请参见here
如果删除临时文件
如果成功重命名文件
您可以使用SystemCommandTasklet或为6和7实现自己的tasket
您的听众看起来与下面的类似
@Component
public class PromoteUpdateCountToJobContextListener implements StepListener {
@OnProcessError
public ExitStatus processError(Object item, Exception e){
String failureMessage = String.format("Failed to process due to item %s" ,
item.toString());
Logger.error(failureMessage);
return ExitStatus.FAILED;
}
}
你的工作xml将类似于:
writer="yourFlatFileItemWriter"/>