Java 退出tasklet中的Spring批处理作业

Java 退出tasklet中的Spring批处理作业,java,spring-batch,Java,Spring Batch,我有一个Spring批处理tasklet,我不知道如何从中失败。我想检查某些参数,如果它们不存在,则在该步骤中使作业失败 @Component public class Tfp211SetupTasklet extends AbstractSetupTasklet { final static Logger LOGGER = LoggerFactory.getLogger(Tfp211SetupTasklet.class); @Override protected R

我有一个Spring批处理tasklet,我不知道如何从中失败。我想检查某些参数,如果它们不存在,则在该步骤中使作业失败

@Component
public class Tfp211SetupTasklet extends AbstractSetupTasklet {

    final static Logger LOGGER = LoggerFactory.getLogger(Tfp211SetupTasklet.class);

    @Override
    protected RepeatStatus performTask(ExecutionContext ec, ChunkContext chunkContext) {
        //TODO
        //add error checking. If the parameter is not there, fail out or throw an error message.
        Map<String, String> params = new HashMap<>();
        List<String> requiredParams = new ArrayList<>();
        requiredParams.add("name");
        requiredParams.add("id");
        requiredParams.add("test");
        JobParameters jobParameters = chunkContext.getStepContext().getStepExecution().getJobParameters();
        params.put("name", jobParameters.getString("name"));
        params.put("id", jobParameters.getString("id"));
        params.put("test", jobParameters.getString("test"));
//        if (!params.values().containsAll(requiredParams)) {
//            LOGGER.info("not all required parameters exist for the job execution to succeed.");
//            return RepeatStatus.FINISHED;
//        }
        ec.put(AbstractSetupTasklet.BATCH_PROGRAM_PARAMS, params);
        ec.put(AbstractSetupTasklet.BATCH_PROGRAM_NAME, NTfp211.class.getSimpleName());
        return RepeatStatus.FINISHED;
    }

}
@组件
公共类Tfp211SetupTasklet扩展了AbstractSetupTasklet{
最终静态记录器=LoggerFactory.getLogger(Tfp211SetupTasklet.class);
@凌驾
受保护的RepeatStatus性能任务(ExecutionContext ec,ChunkContext){
//待办事项
//添加错误检查。如果参数不存在,则失败或抛出错误消息。
Map params=新的HashMap();
List requiredParams=new ArrayList();
所需参数。添加(“名称”);
所需参数添加(“id”);
所需参数添加(“测试”);
JobParameters JobParameters=chunkContext.getStepContext().getStepExecution().getJobParameters();
params.put(“name”,jobParameters.getString(“name”);
params.put(“id”,jobParameters.getString(“id”);
params.put(“test”)、jobParameters.getString(“test”);
//如果(!params.values().containsAll(requiredParams)){
//info(“并非作业执行成功所需的所有参数都存在。”);
//返回RepeatStatus.FINISHED;
//        }
ec.put(AbstractSetupTasklet.BATCH_PROGRAM_PARAMS,PARAMS);
ec.put(AbstractSetupTasklet.BATCH_程序_名称,NTfp211.class.getSimpleName());
返回RepeatStatus.FINISHED;
}
}

注释掉的行是我试图让工作退出的行。任何有此经验的人?

要使tasklet失败,只需从中抛出一个异常。

您可以
实现
接口
步骤执行侦听器
,并在

@Override
public ExitStatus afterStep(StepExecution stepExecution) {
    // check failed condition
    return ExitStatus.FAILED;
}

你总是能用上这些春季批量问题(我有很多),谢谢你的建议