【问题标题】:What tools are there for timed batch processes in Java EE?Java EE 中有哪些用于定时批处理的工具?
【发布时间】:2008-09-16 23:03:26
【问题描述】:

我的雇主刚刚要求我在他们正在运行的 Java EE WebSphere 应用程序中运行一个定时批处理。应该是每天晚上 11:30 上某节课。

我对 Java EE 和 WebSphere 服务器(或开发环境中的 tomcat)不是很熟悉,我一直在研究,但我发现的只是 java 计时器类,而不是如何设置它或调用它。

似乎也需要编辑 web.xml 文件。

任何帮助将不胜感激!

【问题讨论】:

    标签: tomcat jakarta-ee process timer websphere


    【解决方案1】:

    您应该查看来自 OpenSymphony 的开源 Quartz library。非常易于使用,非常适合这类事情。

    TimerTasks 最适合在未来短时间内运行某些东西。但是对于像这样的大时间范围内的重复执行,Quartz 表现出色。您甚至可以将即将执行的任务列表保存在文件或数据库等持久存储中,这样如果您的应用程序重新启动,即将执行的定时作业不会丢失。

    此外,Spring 框架中还有一个非常棒的 Quartz 抽象。

    【讨论】:

      【解决方案2】:

      在 WebSphere 中,您可以使用调度程序服务来触发 Java 类中方法的执行。 调度程序提供了一个用于调度作业执行的日历(类似于 cron),或者您可以自己开发。

      这是 WAS 6.1 文档中描述调度程序的页面的链接:

      http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/index.jsp

      【讨论】:

        【解决方案3】:

        EJB 3.1 将改进计时器服务,以及应用程序生命周期挂钩,无需使用 servlet 即可在无需用户交互的情况下启动任务。

        这可能会回答问题标题,但对于有关在 websphere 上运行的遗留应用程序(写于 6 个多月前;))的“真实”问题,我建议使用启动 servlet 和 EJB 计时器服务。

        Timer Service in J2EE 1.4 (EJB 2.1)

        对于 EJB 3.0(和 3.1 尽快可用),有一些不错的注释;)

        除非您真的需要,否则我不会介绍另一个 library。定时器服务应该足以每天执行任意工作。

        HTH,
        马丁

        【讨论】:

        • 我试过了,发现没有办法创建定时器,因为 servlet 启动方法 (init) 无法访问提供定时器服务 API 的上下文。我已将此作为一个新问题发布在stackoverflow.com/questions/1024081
        【解决方案4】:

        在您的 web.xml 中,您可以配置一个 servlet 以在启动时加载。
        语法:



        这样做,然后在 servlet 的 init 方法中,您可以设置一个 Timer / TimerTask 来执行您需要执行的任何操作。 TimerTasks 类似于线程,只是您可以安排它们何时运行。

        【讨论】:

          【解决方案5】:

          Quartz 是标准 JBoss 4.2.x 发行版的一部分。

          而且是一个非常好的库,无需太多工作您也可以定义简单的工作流程。

          【讨论】:

            【解决方案6】:

            WebSphere 中不支持调度。

            如果您使用的是 unix,则可以使用 crontab 来安排对 websphere 应用程序页面的请求。我想在 Windows 上也可以安排对页面的请求。在我的 crontab 中,我安排了每天 8:45 对网页的请求

            45 8 * * * 获取http://www.domain.com/myBatch?securitykey=verysecret

            现在每天早上都会调用 myBatch servlet,我可以在那里做当时需要做的任何事情。为了避免其他人调用此页面并启动批处理,我添加了 securitykey 参数。

            【讨论】:

            • 是的,而且您会定期将其添加到每个列出 http 访问权限的日志文件中……真的,非常机密……
            • 它在我自己的服务器上运行,我是唯一能看到日志文件的人。这只是为了确保其他人不会开始我的批次。我想在这里说明的一点是,您可以使用 crontab 来调用 servlet。以您认为必要的方式保护它。非常适合我。
            【解决方案7】:
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2014-09-07
            • 1970-01-01
            • 2016-01-20
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-03-23
            相关资源
            最近更新 更多