Java 春季跑步';s任务调度器

Java 春季跑步';s任务调度器,java,spring,Java,Spring,我在Spring中使用下面的代码片段来计划作业执行。通过查询数据库找到作业。找到新作业(尚未计划)后,将以编程方式对其进行计划 我的问题是,这是为任务执行创建可运行文件的方法吗?它是以正确的方式访问taskScheduler,还是应该通过从应用程序上下文获取实例来访问它 @Service public class TimeOfDayScheduler { @Autowired private JobExecutor jobExecutor; @Autowired

我在Spring中使用下面的代码片段来计划作业执行。通过查询数据库找到作业。找到新作业(尚未计划)后,将以编程方式对其进行计划

我的问题是,这是为任务执行创建可运行文件的方法吗?它是以正确的方式访问
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
方法。