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



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

例如:

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

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

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

也许有人有Idee,谢谢:(

我找到了一个解决方案:创建一个ThreadPoolTaskScheduler交换机,我可以用它来执行一个可运行的类:

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

最新更新