如果 ScheduledExecutorService 失败怎么办?

问题描述 投票:0回答:1

如果将所有任务放在

ScheduledExecutorService
上,但是如果服务器关闭或服务器获取更新并重新启动,我分配给线程的任务将丢失,有什么解决方案吗

如何保存我已经放入的数据

ScheduledExecutorService

java mysql spring-boot multithreading scheduledexecutorservice
1个回答
0
投票

Java 提供的

ScheduledExecutorService
的实现仅在内存中记住其提交的任务。

当你的应用程序退出时,所有已提交和正在执行但未完成的任务都会消失,噗💨。或者更糟糕的是,如果您没有优雅地关闭它们,支持线程池的线程可能会无限期地继续下去,就像僵尸一样🧟u200d♂️。

如果您需要跟踪任何未完成或等待执行的剩余任务,请使用其他工具,或自行管理跟踪。

追踪自己并不困难。这是一个解决方案......

当您提交任务时,您会将其标识符记录在数据库中。作为任务工作的最后一步,任务将删除或修改与其自身标识符匹配的数据库记录。

启动时,您的应用程序将查询数据库以查找尚未完成的任务。然后重新创建这些任务对象,并提交给新的

ScheduledExecutorService

在这种情况下,强大的数据库引擎(例如 H2Postgres)可以应对并发挑战,以及面对崩溃或断电等中断时的弹性挑战。

我想您可以编写自己的

ScheduledExecutorService
实现来处理这种持久的任务跟踪。但我不知道我是否会打扰。

© www.soinside.com 2019 - 2024. All rights reserved.