java - 如何在 Tomcat 之外运行 Tomcat-Spring/Struts 2-Quartz 任务?

标签 java jakarta-ee tomcat struts2 quartz-scheduler

我们在 Tomcat 6 上部署了一个应用程序。它基于 Spring/Struts 2 构建,并安排了多个 Quartz 任务。

我们希望将一些任务从 Quartz 转移到 Linux 的 cron 上,尽可能减少编码量。我如何在 Tomcat 容器之外和独立的 Java 应用程序中运行那些 Spring/Quartz 任务?


(更新:因为有人想知道我们为什么要这样做)

我们想将计划任务移动到它们自己的 Java 应用程序中,因为我们的 Tomcat 一直在我们身上死去。没有错误记录。我们怀疑我们拥有的这个巨大的 Quartz 任务是罪魁祸首,但无论是因为内存泄漏还是由于设置不正确导致我们的 Tomcat 段错误,我们仍然不知道。

我们想通过将它踢出Tomcat容器来隔离它,看看Tomcat是否还会断断续续死掉。然而,由于该应用程序已经上线(虽然处于封闭测试阶段),我们希望用最少的编码工作来解决这个问题,同时仍然保持它运行(因为,你知道,“新代码,新问题”——仅供引用,我们已经在考虑重写/重新设计,但“救火”现在是一个更紧迫的问题)。

最佳答案

我不熟悉 Quartz,但我熟悉 stuts2 和 cron。

通常在 Linux 中,您使用 cron 调用单独的进程,因此我认为最好将 quartz 作业减少到单独的独立程序中。考虑到您的项目的 Java EE 性质以及对通过 spring 获取服务的依赖,我认为这不是一个特别有吸引力的选择。

我在 PHP 中见过但在 struts2 中同样适用的第二条路线是使用 lynx 调用特定的 url,这可能会触发类似以下的工作:

*/15 * * * * lynx -dump http://localhost/MyApp/MyAction

它会每 15 分钟调用一次您的操作(转储选项阻止 lynx 进入交互模式,只是将输出转储到标准输出,因此程序只会运行一会儿),然后可以运行您的作业。然后你会想要查看 iptables(或类似的)来限制对那些你不想从外部访问的服务的访问。您也可以在 struts2 中执行此操作,方法是将所有这些操作放在一个包中,并制作一个拦截器来检查请求者是否是本地主机。

我认为第二种方法需要的更改最少。

关于java - 如何在 Tomcat 之外运行 Tomcat-Spring/Struts 2-Quartz 任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9125814/

相关文章:

java - 解释警告 : non-varargs call of varargs method with inexact argument type for last parameter

java - 哪个是最好的 Java datepicker..?

jakarta-ee - Kerberos 身份验证 key 表 KVNO

java - 通过 HttpClient 连接 Tomcat 管理器

tomcat - 为什么在只能部署到 webapps 文件夹时使用上下文路径

java - 已经有关联的托管连接错误

java - JList 右键显示菜单(使用、删除、取消)

java - 无法按升序对列表进行排序

java - 使用 n 个应用程序服务器和 dao 作为 Web 系列扩展我的 Web 应用程序

java - session bean 返回错误值