Java 春季跑步';s任务调度器
我在Spring中使用下面的代码片段来计划作业执行。通过查询数据库找到作业。找到新作业(尚未计划)后,将以编程方式对其进行计划 我的问题是,这是为任务执行创建可运行文件的方法吗?它是以正确的方式访问Java 春季跑步';s任务调度器,java,spring,Java,Spring,我在Spring中使用下面的代码片段来计划作业执行。通过查询数据库找到作业。找到新作业(尚未计划)后,将以编程方式对其进行计划 我的问题是,这是为任务执行创建可运行文件的方法吗?它是以正确的方式访问taskScheduler,还是应该通过从应用程序上下文获取实例来访问它 @Service public class TimeOfDayScheduler { @Autowired private JobExecutor jobExecutor; @Autowired
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())
}
}
如何防止重复调度?类不完整,实际上有一个映射保存提交的作业。但是我的问题更倾向于调用
jobExecutor.execute()
,它能在Runnable中以这种方式调用吗?那么您的实现没有问题。这就是调度程序的使用方式。我只需删除@PostConstruct
。由于@Scheduled
,将自动运行findNewJobs
方法。