gpt4 book ai didi

java - 如何使用 DataMinder 调度程序启动批处理作业?

转载 作者:行者123 更新时间:2023-11-30 10:37:47 27 4
gpt4 key购买 nike

我们需要在每晚 03:00 运行一个批处理作业。我们有几个流程,每个流程都有一些任务。这个想法是让进程每晚运行并下载一些数据文件并更新其他系统。

我不明白的是如何实现调度程序(DMScheduler)这将在每晚的特定时间启动一个过程。有关于插件开发的一般信息,但没有据我所知,具体关于调度程序。

谁能解释一下如何DataMinder调度器的工作原理以及如何实现上面的调度器?也许一些实现示例?

最佳答案

下面的 2 种调度程序方法使用“机器”时间(相对于“人”时间):

getNextRunTimeInMilliseconds(long nowInMilliseconds)
setLastStartedTimeInMilliseconds(long lastStartedTimeInMilliseconds)

请参阅关于“机器”和“人类”时间的讨论 https://docs.oracle.com/javase/tutorial/datetime/iso/instant.html

“机器”时间基本上是一个时间戳,与日期、时区无关。“人类”时间是特定时区的特定日期和时间。

这意味着在这种情况下,您需要在“机器”时间和“人类”时间之间进行转换。

调用方法 getNextRunTimeInMilliseconds(nowInMilliseconds) 可能会被 DataMinder 调用多次,这只是一个检查查看下一次运行时间是否已更改,例如,插件/调度程序参数可能已更改。当一个进程已经启动并完成运行该方法时

setLastStartedTimeInMilliseconds(lastStartedTimeInMilliseconds)

在进程上次启动和运行时被调用。

举个例子:

这里有一些日期/时间和相应的时间戳:

2016-08-06 03:00:00 = 1470445200000
2016-08-07 03:00:00 = 1470531600000

假设该流程最后一次运行是“2016 年 8 月 6 日,03:00 CET”。这对应于时间戳(Java long)1470445200000。

什么时候

setLastStartedTimeInMilliseconds(1470445200000)

以上述值调用,您需要将其转移到“人类”时间“6:th of August 2016, 03:00 CET” 然后计算下一次运行时间应该是什么时候。在这种情况下,“人类”时间的下一个运行时间将是后一天,即“2016 年 8 月 7 日,03:00 CET”,这对应于时间戳 1470531600000。

getNextRunTimeInMilliseconds(nowInMilliseconds) 

应该返回新值1470531600000 告诉 DataMinder 在“2016 年 8 月 7 日,03:00 CET”运行进程。而当过程已运行将调用

setLastStartedTimeInMilliseconds(lastStartedTimeInMilliseconds) 

并且调度程序必须再次计算根据接收到的 lastStartedTimeInMilliseconds 确定下一次运行时间。

希望它能让事情更清楚。

关于java - 如何使用 DataMinder 调度程序启动批处理作业?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40015742/

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