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

How to start batch jobs using DataMinder scheduler?

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

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

有人可以解释一下 DataMinder 调度器的工作原理以及如何实现上面的调度器吗? 也许有一些实施示例?

下面的 2 个调度程序方法使用 "machine" 时间(相对于 "human" 时间):

getNextRunTimeInMilliseconds(long nowInMilliseconds)
setLastStartedTimeInMilliseconds(long lastStartedTimeInMilliseconds)

请在 https://docs.oracle.com/javase/tutorial/datetime/iso/instant.html

查看关于 "machine" 和 "human" 时间的讨论

基本上"machine"时间是时间上的时间戳,与日期、时区无关。 "Human"时间是特定时区的特定日期和时间。

这意味着在这种情况下你需要在"machine"时间和"human"时间之间进行转换。

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

setLastStartedTimeInMilliseconds(lastStartedTimeInMilliseconds)

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

举个例子:

这里有一些date/times和相应的时间戳:

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

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

setLastStartedTimeInMilliseconds(1470445200000)

被以上值调用你需要将其转移到"human"时间 “2016 年 8 月 6 日,03:00 CET”,然后算出下一个 运行 时间应该是什么。 在这种情况下,"human" 时间中的下一个 运行 时间将是后一天,即“2016 年 8 月 7 日,03:00 CET”,这对应于 时间戳 1470531600000.

getNextRunTimeInMilliseconds(nowInMilliseconds) 

应该return新值 1470531600000 告诉 DataMinder 运行“2016 年 8 月 7 日,03:00 CET”的进程。而当过程 有 运行 会打电话给

setLastStartedTimeInMilliseconds(lastStartedTimeInMilliseconds) 

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

希望它能让事情更清楚。