使用数据库中的 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
我正在尝试使用数据库中定义的值更改特定方法的 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