使用数据库中的 cron 表达式执行计划的方法

Execute Scheduled methods with cron expression from Database

我正在尝试使用数据库中定义的值更改特定方法的 cron 表达式。我通常为此使用 Spring 注释。

例如:

@Scheduled(cron = "cronExpression from Database")
public void typeAJob(){
...
}

如果在我的程序启动后这些 cron 表达式计数不再更改就可以了。但在开始时,它应该从数据库中读取值并将其用作此方法的 cron 表达式。

最终目标是,我在数据库中有 X 个作业,每个作业都有自己的 cron 表达式。作业将具有特定类型(typeAJob、typeBJob 等)。 每种类型都有自己的 Scheduled 方法。

也许有人有想法,谢谢:)

我找到了一个解决方案: 创建一个 ThreadPoolTaskScheduler 我可以用来执行一个可运行的 class:

    public ExportJobService exportScheduler(ThreadPoolTaskScheduler threadPoolTaskScheduler) {
        threadPoolTaskScheduler.setPoolSize(5);
        threadPoolTaskScheduler.setThreadNamePrefix("ExportJobScheduler");
        return new ExportJobService(threadPoolTaskScheduler);
    }

我使用 PostConstruct 从数据库加载特定的 cronExceptions 并在我的程序开始时执行所有作业。

 @PostConstruct
    public void runJobs() {
        repository.findAll()
                  .stream()
                  .map(this::buildJob)
                  .forEach(job -> {
                      var cronTrigger = new CronTrigger(job.getCronExpression());
                      taskScheduler.schedule(job, cronTrigger);
                  });
    }

您可以在这里找到更多信息:https://www.baeldung.com/spring-task-scheduler