【发布时间】:2020-08-08 15:03:08
【问题描述】:
我需要对其中一个 DB 表(比如 T1)执行轮询操作并更新另一个 DB 表(比如 T2)的状态。只要表 T2 中有插入,就必须安排此作业。
我知道 Quartz 调度程序,但它提供了基于时间的调度和轮询。 有没有其他库可以方便地处理这种情况?
【问题讨论】:
-
你能指定数据库是如何更新的吗?插入是来自您的应用程序还是来自其他来源?
-
Quartz 允许您动态创建作业并“现在”执行它。不知道为什么需要使用“轮询方法”来执行此操作,我的意思是,为什么不更新更新第一个表的请求“内部”的第二个表?另一方面,也许您可以使用数据库触发器来管理这种情况。
-
我不清楚您要解决的问题以及解决方案的任何限制。一般来说,轮询不是一个理想的解决方案,因为它经常浪费资源。我会首先尝试基于事件的解决方案。您是否考虑过在 T1 上添加 SQL 插入触发器?它可以更新 T2。这将避免运行任务调度程序的额外工作/复杂性。如果一定要使用轮询,我相信 Quartz 有丰富的功能集和多种调度模式。如果你不喜欢 Quartz,Java 有几个可能工作的线程池执行器,例如 ScheduledThreadPoolExecutor。
-
@dotore 是的,触发器可以是解决方案之一,但数据库不在我的控制之下,而且相同的表用于多种目的,所以我想到了创建一个通用的轮询机制。
-
@devdanke 是的,你是对的。所以我想要实现的是,一旦在 T2 中插入了一行,我需要检查状态列是否有 T1 表中的任何更改并继续检查 1 分钟,如果在该列中检测到任何更改,那么我会需要更新T2中插入行的值。
标签: java spring spring-boot polling