在 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.
中有什么方法可以做到这一点
例如,您可以使用 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());
}
}
}
调度程序需要 运行 能够执行和 运行 尝试的时间。 TaskScheduler 还允许您使用触发器。查看文档 here
我有一个数据队列,其中有一个字段 "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.
中有什么方法可以做到这一点例如,您可以使用 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());
}
}
}
调度程序需要 运行 能够执行和 运行 尝试的时间。 TaskScheduler 还允许您使用触发器。查看文档 here