我有一个数据队列,其中包含“创建时间”字段。我将按升序创建的时间顺序在队列中插入项目。现在我必须在队列中每个第一个条目的创建时间运行一个进程,它应该只运行一次。
前 -
队列中有五个条目,时间为
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运行,并且在一定时间后不再发生。
我正在使用春季靴子。有没有办法在春天这样做。
答案 0 :(得分:0)
您可以使用ThreadPoolTaskScheduler实现配置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