在Spring中安排多个任务

时间:2018-06-04 15:27:20

标签: spring scheduled-tasks

我有2个任务实现(我的)PeriodicTask,它实现了Runnable。 有一个代码可以正常工作。但是我预计将来会有很多任务,并希望避免在TaskScheduler中注册每个任务。 TaskScheduler是否可以找到所有类(实现PeriodicTask)并安排它们。 还有一个问题是如何设置计划参数(让它们成为开始时的静态最终)。

@Component
public class TaskScheduler {

    private final Task1 task1;
    private final Task2 test2;

    public TaskScheduler(Task1 task1, Task2 test2) {
        this.task1 = task1;
        this.test2 = test2;
    }
    @Scheduled(fixedDelay = 60 * 1000, initialDelay = 1000)
    public void scheduleTask1() {task1.run();}

    @Scheduled(fixedDelay = 3600 * 1000, initialDelay = 5 * 1000)
    public void scheduleTask2() {test2.run();}
}

1 个答案:

答案 0 :(得分:2)

您可以在没有@Scheduled注释的情况下实现它:

@Component
public class TaskSchedulerComponent {

    @Autowired
    private ThreadPoolTaskScheduler taskScheduler;


    public void schedulePeriodicTask(Runnable task, long delay, long period){

        PeriodicTrigger periodicTrigger
                = new PeriodicTrigger(period, TimeUnit.MICROSECONDS);
        periodicTrigger.setFixedRate(true);
        periodicTrigger.setInitialDelay(delay);

        taskScheduler.schedule(task,periodicTrigger);
    }
}

然后在main方法中,您可以在给定的延迟和时间段内注册应定期执行的所有任务。

注意: 要使@Scheduled使用参数,您可以使用属性文件中的值,如下所示:

@Scheduled(fixedDelayString = "${fixed.delay}",initialDelay = ${init.delay})