我在Spring中使用以下代码片段来安排作业执行。通过查询数据库找到作业。一旦找到新作业(尚未安排),就会以编程方式进行安排。
我的问题是,这是为任务执行创建Runnables的方法吗?它是以正确的方式访问taskScheduler
还是应该通过从应用程序上下文中提取实例来访问它?
@Service
public class TimeOfDayScheduler {
@Autowired
private JobExecutor jobExecutor;
@Autowired
private TaskScheduler taskScheduler;
@Scheduled(cron = "${scheduler.interval}")
@PostConstruct
public void findNewJobs() {
// Checks the database if any new jobs should be scheduled
// ...
// If found:
scheduleJob(somejob);
// ...
}
public void scheduleJob(final Job job) {
Runnable task = new Runnable() {
@Override
public void run() {
try {
jobExecutor.execute(job);
} catch (Exception e) {
logger.error("Scheduler error", e);
}
}
};
taskScheduler.schedule(task, new CronTrigger(job.getCronPattern())
}
}