在 Spring 引导中随机安排进程

Schedule Process at random time in Spring Boot

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

例如——

队列中有 5 个条目
1) 1:00
2) 1:15
3) 1:20
4) 1:30
5) 2:00

所以我的计划流程应该 运行 在 1:00 pm 然后在 1:15pm 然后在 1:20pm 然后在 1:20 最后在 2:00只在下午,一定时间后不再出现。

我正在使用 spring 启动。在 spring.

中有什么方法可以做到这一点

例如,您可以使用 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());
        }
    }
}

调度程序需要 运行 能够执行和 运行 尝试的时间。 TaskScheduler 还允许您使用触发器。查看文档 here