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

时间:2016-10-13 08:18:42

标签: java batch-processing

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

我不明白如何实施调度程序(DMScheduler) 这将在特定时间每晚开始一个过程。 有关插件开发的一般信息,但没有 我可以看到具体的调度程序。

有人可以解释DataMinder调度程序如何工作以及如何实现如上所述? 也许是一些实现例子?

1 个答案:

答案 0 :(得分:1)

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”。这对应于时间戳(如Java long)1470445200000。

何时

setLastStartedTimeInMilliseconds(1470445200000)

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

getNextRunTimeInMilliseconds(nowInMilliseconds) 

应该返回新值 1470531600000告诉DataMinder在“2016年8月7日,欧洲中部时间03:00”运行流程。而当这个过程 已经开通了一个电话

setLastStartedTimeInMilliseconds(lastStartedTimeInMilliseconds) 

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

希望它能让事情更加清晰。