gpt4 book ai didi

java - 如何将时间与我的 table 匹配?

转载 作者:行者123 更新时间:2023-12-02 05:52:56 25 4
gpt4 key购买 nike

我的数据库表包含计划作业以及它们开始的时间。目前,我有一个连续的线程正在运行,它不断检查此时是否有计划的作业。该方法没有给出任何异常,没有错误,但作业从未运行。根据我的想法,我正在以不正确的方式检查表中的时间条目,结果错过了一秒或几秒。

这就是我正在做的事情:

SELECT job FROM mytable where time = new java.sql.Time(new GregorianCalendar().getTimeInMillis())

上面的SQL是在一个连续的线程内不断运行的。

这是匹配时间条目的正确方法吗?

最佳答案

必须不断地轮询数据库是不必要的低效。最好在数据库中查询最早作业的开始时间,然后设置一个计时器,以便在运行该作业时唤醒。例如:

select top(1) * from  myTable where time <= current_time  // however you get the current time
order by time

然后,从作业开始时间中减去当前时间。然后,您可以设置一个计时器来等待该时间。当计时器触发时,启 Action 业并查询数据库以获取下一个作业。

显然,如果开始时间早于当前时间,您会希望立即开始作业,然后检查数据库中的下一个作业。

但是接下来的问题是如何处理在等待第一个作业开始时出现的新作业。或者,如果数据库中没有作业,但有新作业进入。无论哪种情况,最好的解决方案是以某种方式收到新作业已进入的通知,以便您可以查询数据库。然后,如果新作业的开始时间早于您正在等待的当前作业,则销毁现有计时器,设置一个新计时器来等待新的、较早的作业,然后返回等待。

此设置完全消除了数据库的定期轮询。相反,您依赖的是新工作到来时的通知。如果没有有关程序结构的更多信息,我无法具体说明您将如何编码,或者即使在您的情况下是否可能。但如果您可以控制系统的设计,我强烈建议您这样做。

关于java - 如何将时间与我的 table 匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23379143/

25 4 0