我的程序有一个组件——称为调度程序——它允许其他组件注册它们想要被回调的时间点。这应该像 Unix cron 服务一样工作,即您告诉调度程序“在每整整一小时后十分钟通知我”。
我意识到Java中没有真正的回调。
这是我的方法,是否有一个图书馆已经做了这些事情?也可以随意提出改进建议。
注册对调度程序的调用传递:
- 包含小时、分钟、秒、年月、dom、dow 的时间规范,其中每个项目可能未指定,意思是“每小时/分钟等执行一次”。(就像 crontabs 一样)
- 一个包含数据的对象,当调度程序通知调用对象时,它将告诉调用对象做什么。调度程序不处理这些数据,只是将其存储并在收到通知时将其传回。
- 对调用对象的引用
在启动时,或在新的注册请求之后,调度程序从当前系统时间的日历对象开始,并检查数据库中是否有任何条目与该时间点匹配。如果有,则执行它们并重新开始该过程。如果没有,Calendar 对象中的时间将增加一秒并重新检查 entreis。如此重复,直到有一个或多个匹配项。(离散事件模拟)
然后调度程序将记住该时间戳,每秒睡眠和唤醒以检查它是否已经存在。如果它碰巧醒来并且时间已经过去,它会重新开始,同样如果时间到了并且作业已经执行。
编辑:感谢您将我指向 Quartz。然而,我正在寻找更小的东西。