当前位置: 首页 > 面试题库 >

Spring-Batch:如何从StepListener返回自定义Job退出代码

钦宏义
2023-03-14
问题内容

问题是这样的:我只有一个步骤就能完成一个Spring
Batch作业。此步骤称为多次。如果每次调用它,一切正常(无异常),则作业状态为“已完成”。如果至少在Step的执行之一中发生了问题(抛出异常),我已经配置了一个StepListener,它将退出代码更改为FAILED:

public class SkipCheckingListener extends StepExecutionListenerSupport {

    public ExitStatus afterStep(StepExecution stepExecution) {
        String exitCode = stepExecution.getExitStatus().getExitCode();
        if (stepExecution.getProcessorSkipCount() > 0) {
            return new ExitStatus(ExitStatus.FAILED);
        }
        else {
            return null;
        }
    }

}

当满足条件时,将执行“ if”块,并且作业以FAILED状态结束,这可以正常工作。但是请注意,我在这里返回的退出代码仍在Spring
Batch随附的标准代码中。我想在某些时候返回我的个性化退出代码,例如“ COMPLETED WITH SKIPS”。现在,我尝试更新上面的代码以返回:

public class SkipCheckingListener extends StepExecutionListenerSupport {

    public ExitStatus afterStep(StepExecution stepExecution) {
        String exitCode = stepExecution.getExitStatus().getExitCode();
        if (stepExecution.getProcessorSkipCount() > 0) {
            return new ExitStatus("COMPLETED WITH SKIPS");
        }
        else {
            return null;
        }
    }

}

如文档中所述:http ://static.springsource.org/spring-
batch/reference/html/configureStep.html(5.3.2.1。批处理状态与退出状态)。我什至尝试过

stepExecution.getJobExecution().setExitStatus("COMPLETED WITH SKIPS");

可以肯定的是,执行到达了“ if”块,执行了代码,但我的工作仍然以退出代码COMPLETED完成,完全忽略了我通过侦听器设置的退出代码。

他们的文档中没有关于此的更多详细信息,而且我还没有使用Google找到任何东西。有人可以告诉我如何以这种方式更改Job退出代码吗?谢谢


问题答案:

看起来您只是不能更改BatchStatus,但是可以使用exitstatus尝试

此代码与JobListener对我有用

// JobListener with interface or annotation
public void afterJob(JobExecution jobExecution) {
    jobExecution.setExitStatus(new ExitStatus("foo", "fooBar"));
}


 类似资料:
  • 我需要生成具有以下要求的CSV文件: 每个字段都被引号包围 分隔符(管道字符)用反斜杠转义 反斜杠用反斜杠转义 输入: 字段1 Field2 with\反斜杠"DoubleQuotes"And|管道 字段3 预期产出: 有可能获得这样的输出吗?

  • 我使用Web服务方法启动spring batch Job,如果spring batch过程中出现任何异常,控制将返回到processor process方法。但是我需要控制器返回到Web服务方法,在那里我必须捕捉并编写代码以电子邮件发送异常。

  • 有人能告诉我一些资源吗?这些资源可以指导我如何实现一个定制的Spring Security身份验证,首先在ldap服务器上测试找到的用户的凭据,如果该用户的ldap用户名字段存在,如果无法进行身份验证(可能是因为ldap用户名不存在,或者给定的密码没有对服务器上的用户名进行身份验证),则会尝试根据本地数据库中散列的用户本地密码进行身份验证。 非常感谢。

  • 我正在处理WebAPI 2中的一个服务,endpoint当前返回一个<code>IHttpActionResult<code>。我想返回一个状态代码,但由于它不在枚举中,我不知道如何发送它,因为所有构造函数都需要一个参数 目前,我正在返回<code>BadResult(消息),但返回<code>422

  • 我们使用Spring Batch提供的UI,将war示例用于作业监视器。版本:spring-batch-admin-sample-1.0.0.发行版 现在我们认为从UI中删除一些不需要的菜单项。