<分区>
要求我们推荐或查找工具、库或最喜欢的场外资源 的问题对于 Stack Overflow 来说是偏离主题的,因为它们往往会吸引自以为是的答案和垃圾邮件。相反,describe the problem 以及迄今为止为解决该问题所做的工作。
关于您编写的代码问题的问题必须在问题本身中描述具体问题 — 并且包括有效代码 以重现它。参见 SSCCE.org 寻求指导。
对于这篇复杂的帖子,我提前表示歉意。
我需要找到一种方法,每 5 分钟使用来自对 Web 服务的调用的信息自动更新数据库。我打算编写一个 Java 程序,从云端的 Web 服务中提取数据并将其放入数据库中。我需要这个程序每 5 分钟左右从云中提取一次数据,以便我们按时间顺序获取数据。实现这个的好方法是什么?这将在运行 Linux 的服务器计算机上完成。
我在想两种可能性:
1.
我可以在服务器上一天 24 小时运行的无限循环中编写一个 Java 程序,并且每次让线程 hibernate 5 分钟。如果是这样,我如何确保服务器计算机保持程序运行?如果服务器重新启动,它会再次开始运行吗?我需要一些方法来自动化。有任何想法吗?
或者
2.
我可以编写一个非循环程序,并以某种方式让操作系统或其他软件每 5 分钟运行一次该程序。有什么方法可以让 Linux 或服务器软件做到这一点?有任何想法吗?
如果有人能指出我正确的方向,将不胜感激。
您提到了两种不同的“技术”,它们具有不同的处理方法,一种是 Java,第二种是 linux。
在 linux 上你有
CRON - 这是一种执行计划任务(脚本)的“linux”方式,因此您可以每 5 分钟运行一次 java 程序/任何您想要的。正确定义你不应该被服务重新启动所困扰,cron 将在服务重新启动时自动运行,并将处理你的 java 程序。您可能想改用 anacron,但您应该在此处咨询您的系统管理员以了解详细信息。
如果你不想在 linux 中运行预定作业,也不想在 Java 中管理调度,你确实可以编写一个程序,通过进程将永远运行,在无限循环中运行,但在这种情况下,我建议您使用 java.util.Timer 而不是 sleep ,或者如果您不介意使用第三方 - 而不是使用 Quartz,它是一个完整的 Java 调度程序。但是为了让这个程序在重启时运行,你应该将它定义为 linux 中的一个服务。基本上,您将一些脚本(正确定义)放在预定义的文件夹中,注册服务,Linux 在重新启动时将调用此脚本,这样您就可以在需要时运行。
服务 myscheduledtask 启动/停止/状态
技术细节根据 Linux 发行版略有不同,但运行计划任务的基础设施肯定存在于任何发行版中
例如,在 Redhat 上,您应该将 chkconfig
命令视为入口点。
现在什么方法更好?这里没有 Elixir 。我可能会选择基于 cron 的方法,因为它更容易。但作为一名 java 程序员,我意识到 java 将提供一个跨平台解决方案(如果有一天你将转移到另一个操作系统,那么你将不得不重新定义调度机制)。
另一方面,拥有更少的进程总是更好,因此始终运行的进程在这里是一个缺点 :) 所以,选择权在你自己
希望对你有帮助