在Spring Boot中随机安排进程

时间:2017-01-09 12:41:43

标签: java spring spring-boot scheduler

我有一个数据队列,其中包含“创建时间”字段。我将按升序创建的时间顺序在队列中插入项目。现在我必须在队列中每个第一个条目的创建时间运行一个进程,它应该只运行一次。

前 -

队列中有五个条目,时间为
1)1:00
2)1:15
3)1:20
4)1:30
5)2:00

所以我的预定程序应该在下午1:00然后在下午1:15然后在下午1:20然后在1:20和最后下午2:00运行,并且在一定时间后不再发生。

我正在使用春季靴子。有没有办法在春天这样做。

1 个答案:

答案 0 :(得分:0)

您可以使用ThreadPoolTask​​Scheduler实现配置TaskScheduler,例如,它基本上是ScheduledThreadPoolExecutor的包装器:

@Bean
public TaskScheduler taskScheduler ()
{
    ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();
    taskScheduler.initialize();
    return taskScheduler;
}

然后,您可以使用调度程序以汇总方式处理队列:

public class MyQueueParser
{
    @Autowired
    private TaskScheduler scheduler;

    public void parseQueue()
    {
        for (Item item: myQueue)
        {
            scheduler.schedule(() -> {
                // do the work
            }, item.getCreationTime());
        }
    }
}

调度程序需要runnable执行以及运行tast的时间。 TaskScheduler还允许您使用触发器。查看文档here