java 有没有一种方法可以使用JobRunr和Sping Boot 自动“取消调度”重复性作业?

xdnvmnnf  于 2023-02-20  发布在  Java
关注(0)|答案(1)|浏览(125)

我正在使用JobRunr 6.0.0(OSS)在Sping Boot 后端(2.7.4)中执行重复性作业。我使用Spring Boot启动器jobrunr-spring-boot-2-starter,它允许我使用注解@Recurring来调度作业。这工作得很好。我的问题是当我想要“取消调度”重复性作业时:删除(或注解)@Recurring注解不会取消调度作业。
更具体地说,下面是我如何使用JobRunr来调度一个应该每30秒发生一次的任务的示例:

@Service
public class MyService {

    @Recurring(cron = "*/30 * * * * *", id = "my-id")
    public void doSomething() {
        LOGGER.info("did something");
    }
}

配置中没有什么特别的地方,application.properties中与JobRunr相关的部分是这样的:

org.jobrunr.background-job-server.enabled=true
org.jobrunr.dashboard.enabled=false
org.jobrunr.background-job-server.worker-count=2
org.jobrunr.background-job-server.poll-interval-in-seconds=10

到目前为止,一切都按预期运行,作业确实每30秒执行一次,并且在JobRunr表中正确添加了一个条目,负责跟踪重复作业(jobrunr_recurring_jobs)。
我的问题是,当我删除@Recurring注解时,或者当我完全删除被定期调度的代码位时(因为我的后端代码必须发展,并且这个特定位不再有用,或者因为有一点重构,或者...),例如,我的代码看起来如下:

@Service
public class MyService {

    // @Recurring(cron = "*/30 * * * * *", id = "my-id")
    // public void doSomething() {
    //    LOGGER.info("did something");
    // }
}

在这种情况下,以前调度的代码已消失。但与旧作业对应的条目仍存在于jobrunr_recurring_jobs表中。这会导致日志中出现许多错误,因为JobRunr正在尝试执行一些不再存在的代码。
我可以手动删除jobrunr_recurring_jobs表中的条目,或者使用提供的 Jmeter 板来删除(不过,我不打算在生产环境中保留 Jmeter 板),这很容易出错。
是否有办法配置JobRunr,使其“自动清除”不再计划的重复作业?

whhtz7ly

whhtz7ly1#

有几种方法可以删除周期性作业:

  • 有您提到的控制面板-如果您只能在PRD环境中内部访问它,则可以通过那里删除它
  • 给予你的循环作业一个id -然后你可以通过编程删除它
  • JobRunr Pro附带了一个迁移API,它不仅允许您迁移这些作业(或根据需要删除它们),而且还允许您选择添加test case so that your CI/CD失败,如果您有在PRD中计划但在当前代码中不可用的作业。

要为您的周期性职务指定ID并删除它们,请参阅以下示例:

@Service
public class MyService {

    @Recurring(id = "my-id", cron = "*/30 * * * * *")
    public void doSomething() {
       LOGGER.info("did something");
    }
}

要删除它们:

jobScheduler.delete("my-id");

相关问题