【问题标题】:Job Execution Listener is failed to store value in Job Execution Context Table作业执行侦听器未能在作业执行上下文表中存储值
【发布时间】:2018-07-25 07:58:54
【问题描述】:

我已经在 J​​obExecutionListener 的 afterJob() 方法中实现了将处理失败和成功的数量存储到作业执行上下文中的功能:

    public void afterJob(JobExecution jobExecution) {
    final long jobExecutionId = jobExecution.getId();
    final BatchStatus jobStatus = jobExecution.getStatus();
    final ExecutionContext jobExecutionContext = jobExecution.getExecutionContext();

    String exitCodeAndMessage = null;
    Map<String, Integer> recordsProcessed = null;

    switch (jobStatus) {
        case COMPLETED:
            //exitCodeAndMessage = getExitCodeAndMessageFromEveryStep(jobExecution);
            recordsProcessed = getExitCodeAndMessageFromEveryStep(jobExecution);
            if (exitCodeAndMessage == null) {
                exitCodeAndMessage = "COMPLETED";
            }
            jobExecutionContext.putString("AfterJob", "Success");
            jobExecutionContext.put("recordsProcessed", recordsProcessed);
            break;

运行作业后,表中没有存储任何值。为什么?

【问题讨论】:

  • 您编写的任何代码都不会将信息写入数据库,并且 JobExecution 已经完成,因此 Spring 不会保留您此时对上下文所做的任何更改。
  • 如何添加代码才能将信息写入数据库?

标签: spring-boot spring-batch batch-processing


【解决方案1】:

作业完成后不会保存作业执行上下文,而是在每个步骤执行之间保存。因此,您可以使用 StepExecutionListener 并将这些指标添加到 afterStep 方法中。更多细节在这里:https://docs.spring.io/spring-batch/4.0.x/reference/html/domain.html#executioncontext

【讨论】:

    猜你喜欢
    • 2014-01-05
    • 1970-01-01
    • 2012-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-31
    • 2020-03-07
    相关资源
    最近更新 更多