gpt4 book ai didi

java - 提交晚上执行的任务

转载 作者:行者123 更新时间:2023-11-30 08:53:07 25 4
gpt4 key购买 nike

我们有一个 Web 应用程序(基于 Spring),用户可以在其中提交一些在单个后台线程中运行的任务。我们正在使用 TaskExecutor我们为此提交可运行对象,并在执行程序线程空闲时立即处理它们。

现在我们希望立即运行这些作业,而是在晚上的某个时间按顺序开始处理它们。到那个时候,他们都会排队等候。我们不知道一天会有多少个作业,也不知道它们需要多少时间,所以我们不想在固定时间单独安排它们。

我查看了 Spring 的 Quartz 集成,但到目前为止我还没有发现任何有用的东西。如果这些挂起的作业以某种方式持久化以便它们能够在重新启动后继续存在,那就太好了。

有什么想法吗?提前致谢。

最佳答案

您可以采用的一种方法是在提交每个任务后立即将其存储在数据库中。

然后,在晚上,您可以运行一个作业来查询数据库并按顺序处理返回的任务。当每个任务的处理完成后,您可以从数据库中删除任务或将其标记为已处理。

如果碰巧有很多任务,可以分批处理。

该工作的草图可以是:

@Scheduled(cron = "some_time_at_night")
public void runJob() {
// Query non processed tasks from the database
List<Task> tasks = database.getNonProcessedTasks();
// Iterated over returned tasks
for (Task t : tasks) {
try {
// Process current task
this.process(t);
// Mark current task as processed in database or delete it
database.updateTaskAsProcessed(t);
} catch (Exception ex) {
// Handle ex, either log it or store it for further reference
}
}
}

private void process(Task t) {
// Perform processing here
}

Spring 通过 @Scheduled annotation 支持 cron 表达式.

关于java - 提交晚上执行的任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29895774/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com