java - 在 Linux 机器上每 5 分钟使用 java 程序间歇更新数据库

标签 java linux webserver

<分区>

对于这篇复杂的帖子,我提前表示歉意。 我需要找到一种方法,每 5 分钟使用来自对 Web 服务的调用的信息自动更新数据库。我打算编写一个 Java 程序,从云端的 Web 服务中提取数据并将其放入数据库中。我需要这个程序每 5 分钟左右从云中提取一次数据,以便我们按时间顺序获取数据。实现这个的好方法是什么?这将在运行 Linux 的服务器计算机上完成。

我在想两种可能性: 1. 我可以在服务器上一天 24 小时运行的无限循环中编写一个 Java 程序,并且每次让线程 hibernate 5 分钟。如果是这样,我如何确保服务器计算机保持程序运行?如果服务器重新启动,它会再次开始运行吗?我需要一些方法来自动化。有任何想法吗? 或者 2. 我可以编写一个非循环程序,并以某种方式让操作系统或其他软件每 5 分钟运行一次该程序。有什么方法可以让 Linux 或服务器软件做到这一点?有任何想法吗?

如果有人能指出我正确的方向,将不胜感激。

最佳答案

您提到了两种不同的“技术”,它们具有不同的处理方法,一种是 Java,第二种是 linux。

在 linux 上你有

  1. CRON - 这是一种执行计划任务(脚本)的“linux”方式,因此您可以每 5 分钟运行一次 java 程序/任何您想要的。正确定义你不应该被服务重新启动所困扰,cron 将在服务重新启动时自动运行,并将处理你的 java 程序。您可能想改用 anacron,但您应该在此处咨询您的系统管理员以了解详细信息。

  2. 如果你不想在 linux 中运行预定作业,也不想在 Java 中管理调度,你确实可以编写一个程序,通过进程将永远运行,在无限循环中运行,但在这种情况下,我建议您使用 java.util.Timer 而不是 sleep ,或者如果您不介意使用第三方 - 而不是使用 Quartz,它是一个完整的 Java 调度程序。但是为了让这个程序在重启时运行,你应该将它定义为 linux 中的一个服务。基本上,您将一些脚本(正确定义)放在预定义的文件夹中,注册服务,Linux 在重新启动时将调用此脚本,这样您就可以在需要时运行。

    服务 myscheduledtask 启动/停止/状态

技术细节根据 Linux 发行版略有不同,但运行计划任务的基础设施肯定存在于任何发行版中 例如,在 Redhat 上,您应该将 chkconfig 命令视为入口点。

现在什么方法更好?这里没有 Elixir 。我可能会选择基于 cron 的方法,因为它更容易。但作为一名 java 程序员,我意识到 java 将提供一个跨平台解决方案(如果有一天你将转移到另一个操作系统,那么你将不得不重新定义调度机制)。 另一方面,拥有更少的进程总是更好,因此始终运行的进程在这里是一个缺点 :) 所以,选择权在你自己

希望对你有帮助

关于java - 在 Linux 机器上每 5 分钟使用 java 程序间歇更新数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18072389/

相关文章:

python - 通过两个子类扩展 Daemon 类不起作用

Java Web Server 突然停止响应,没有任何异常

java - 如何使用 JNI 将终端输出从 C 程序重定向到 System.out?

java.io.IOException : Stream closed, 但仅当从 jar 运行时

linux - Buildroot 在 makefile 中添加构建依赖

linux - Selenium Maven 项目与 jenkins 集成在 windows 上工作,但同一个项目在 linux 上出错

mysql - 什么会导致 'casual' MySQL DELETE/UPDATE 查询卡住,直到手动终止?

nginx - 在子域上使用具有不同根文件夹的多个位置配置 nginx

java - 在Android上读取和显示表单数据

java - 避免在聚合子模型上使用持久层