使用具有可配置触发器的Spring调度程序配置多个任务

时间:2015-12-16 20:11:56

标签: spring-boot scheduler

我需要一些设计以及弹簧调度程序相关代码的帮助。我正在尝试编写一些实用程序类,其中所有任务(将要执行一些异步处理)都定期安排。

所以,我创建了一个Task类,它有一个execute()方法,需要由每个任务来实现。

public interface Task
{
    void execute();
}

public class TaskOne implements Task
{
    @Override
    public void execute()
    {
        // do something
    }
}

public class TaskTwo implements Task
{
    @Override
    public void execute()
    {
        // do something
    }
}

@Component
public class ScheduledTasks
{
    @Scheduled(fixedRate = 5000)
    public void runTask()
    {
        Task taskOne = new TaskOne();
        taskOne.execute();
        Task taskTwo = new TaskTwo();
        taskTwo.execute();
    }
}

我需要以不同的时间间隔运行不同的任务,我希望可以配置它而无需重新启动服务器。这样,我的意思是这里指定的时间可以在不重新启动的情况下进行更改。 @Scheduled(fixedRate = configurable, with some initial value)

通常,这样做的最佳方法是什么?

我能想到的一种方法是:

1. Keep the trigger (periodic or cron) for each task in db
2. Load these triggers at the time of start up
3. Somehow, annotate the execute() methods with the proper value. This is going to be technically stiff.
4. If we want to change the job interval timing, update the db and refresh the caches.

此外,如果某人可以共享某些代码段或建议类似小型库的内容,那将非常感激。感谢。

1 个答案:

答案 0 :(得分:0)

对于配置,您不需要ScheduledTasks。相反,您可以使用@Component将每个任务注释为execute并注释@Scheduled方法。

 @Componenet
 public class TaskOne implements Task
{
    @Override
    @Scheduled(...)
    public void execute()
    {
        // do something
    }
}

至于更新this question。您必须弄清楚如何区分不同的任务。