JobRunr Spring Boot:如果重复作业(包括重试)失败,如何收到通知

问题描述 投票:0回答:2

我在 Spring Boot 应用程序中使用 jobrunr

5.1.4
。我有一个简单的服务,声明一个允许重试的重复作业。一次失败的作业运行与我无关。相反,我有兴趣在所有作业(即包括所有重试的初始作业)失败后收到通知。

我认为 JobRunr 的

JobServerFilter
是个好主意。但是,只有在作业成功运行的情况下,发生异常时才不会触发
onProcessed()
方法。每次状态变化都会触发
ApplyStateFilter
。对于我的要求来说太频繁了。如果对
FAILED
状态的更改是一系列属于一起的作业中的最后一个(初始作业 + 允许重试作业),这让我一无所知。

一个简单的例子如下:

@Service
public class JobScheduler {

  @Job(name = "My Recurring Job", retries = 2, jobFilters = ExceptionFilter.class)
  @Recurring(id = "my-recurring-job", cron = "*/10 * * * *")
  public void recurringJob() {
    throw new RuntimeException("foo");
  }
}

我的

JobFilter
的基本实现如下所示:

@Component
public class ExceptionFilter implements JobServerFilter, ApplyStateFilter {

  @Override
  public void onProcessing(Job job) {
    log.info("onProcessing: {}", job.getJobName());
    log.info(job.getJobState().getName().name());
  }

  @Override
  public void onProcessed(Job job) {
    log.info("onProcessed: {}", job.getJobName());
    log.info(job.getJobState().getName().name());
  }

  @Override
  public void onStateApplied(Job job, JobState jobState1, JobState jobState2) {
    log.info("onStateApplied: {}", job.getJobName());
    log.info("jobState1: {}", jobState1.getName().name());
    log.info("jobState2: {}", jobState2.getName().name());
  }
}

JobRunr 是否可以实现此用例?或者有人知道如何以不同的方式解决这个问题吗?

提前非常感谢您的支持。

spring-boot jobrunr
2个回答
2
投票

我认为您与来自

onStateApplied
ApplyStateFilter
走在正确的轨道上。

您可以使用以下方法:

  @Override
  public void onStateApplied(Job job, JobState oldState, JobState newState) {
    if (isFailed(newState) && maxAmountOfRetriesReached(job)) {
      // your logic here
    }
  }

OnProcessed
未触发,因为您的作业未处理(由于失败)。


0
投票

JobFilter 是否会被调用来执行特定的作业?我有一个实现 JobServerFilter、ApplyStateFilter 的过滤器,但不会为简单的计划作业和 cron 作业调用它。 我正在与 micronaut 一起使用。 我们需要在 applications.yml 中启用某些功能吗?

© www.soinside.com 2019 - 2024. All rights reserved.